Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server em Linux
Este artigo fornece práticas recomendadas e recomendações para maximizar o desempenho de aplicativos de banco de dados que se conectam ao SQL Server no Linux. Essas recomendações são específicas para rodar na plataforma Linux. Todas as recomendações normais do SQL Server, como design de índice, ainda se aplicam.
As diretrizes a seguir contêm recomendações para configurar o SQL Server e o sistema operacional Linux. Considere usar essas definições de configuração para obter o melhor desempenho para uma instalação do SQL Server.
- Recomendação de configuração de armazenamento
- Configurações de kernel e CPU de alto desempenho
- configuração do SQL Server
Recomendação de configuração de armazenamento
O subsistema de armazenamento que hospeda dados, logs de transações e outros arquivos associados (como arquivos de ponto de verificação para OLTP na memória) deve ser capaz de gerenciar a carga de trabalho média e de pico normalmente.
Usar o subsistema de armazenamento com IOPS, throughput e redundância adequados.
Em ambientes locais, o fornecedor de armazenamento normalmente suporta a configuração RAID de hardware adequada com distribuição em faixas por múltiplos discos para garantir IOPS, rendimento e redundância adequados. No entanto, este suporte pode variar entre diferentes fornecedores e ofertas de armazenamento, com arquiteturas variadas.
Para SQL Server em Linux implementado em Máquinas Virtuais Azure, considere usar RAID por software para garantir os IOPS e os requisitos de throughput adequados. Ao configurar o SQL Server em máquinas virtuais do Azure com considerações de armazenamento semelhantes, consulte Configurar o armazenamento para o SQL Server em VMs do Azure.
O exemplo seguinte mostra como criar RAID de software em Linux numa Máquina Virtual Azure. Lembre-se de que você deve usar o número apropriado de discos de dados para a taxa de transferência necessária e IOPS para volumes com base nos dados, no log de transações e nos requisitos de E/S tempdb. No exemplo seguinte, oito discos de dados estavam ligados à VM; quatro para ficheiros de dados de alojamento, dois para registos de transações e dois para tempdb carga de trabalho.
Para localizar os dispositivos (por exemplo, /dev/sdc) para a criação de RAID, use o comando lsblk.
# For Data volume, using 4 devices, in RAID 5 configuration with 8KB stripes
mdadm --create --verbose /dev/md0 --level=raid5 --chunk=8K --raid-devices=4 /dev/sdc /dev/sdd /dev/sde /dev/sdf
# For Log volume, using 2 devices in RAID 10 configuration with 64KB stripes
mdadm --create --verbose /dev/md1 --level=raid10 --chunk=64K --raid-devices=2 /dev/sdg /dev/sdh
# For tempdb volume, using 2 devices in RAID 0 configuration with 64KB stripes
mdadm --create --verbose /dev/md2 --level=raid0 --chunk=64K --raid-devices=2 /dev/sdi /dev/sdj
Recomendações de particionamento e configuração de disco
Para SQL Server, usa uma configuração RAID. A unidade de faixa do sistema de ficheiros implementada (sunit) e a largura da faixa correspondem à geometria do RAID. Por exemplo, o exemplo seguinte mostra uma configuração baseada em XFS para um volume logarítmico.
# Creating a log volume, using 6 devices, in RAID 10 configuration with 64KB stripes
mdadm --create --verbose /dev/md3 --level=raid10 --chunk=64K --raid-devices=6 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
mkfs.xfs /dev/md3 -f -L log
meta-data=/dev/md3 isize=512 agcount=32, agsize=18287648 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=585204384, imaxpct=5
= sunit=16 swidth=48 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=285744, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
O array de logs é um RAID-10 de seis discos com uma faixa de 64 KB. Como você pode ver:
- Para
sunit=16 blks, 16 * 4096 tamanho do bloco = 64 KB, corresponde ao tamanho da listra. - Para
swidth=48 blks,swidth/sunit= 3, que é o número de unidades de dados na matriz, excluindo unidades de paridade.
Configuração recomendada do sistema de ficheiros
O SQL Server suporta sistemas de ficheiros ext4 e XFS para alojar a base de dados, registos de transações e outros ficheiros, como ficheiros de checkpoint para OLTP em memória no SQL Server. Use o sistema de ficheiros XFS para alojar os ficheiros de dados e registos de transações do SQL Server.
Formate o volume com o sistema de arquivos XFS:
mkfs.xfs /dev/md0 -f -L datavolume
mkfs.xfs /dev/md1 -f -L logvolume
mkfs.xfs /dev/md2 -f -L tempdb
Podes configurar o sistema de ficheiros XFS para ser insensível a maiúsculas minúsculas ao criar e formatar o volume XFS. Esta configuração não é frequentemente usada no ecossistema Linux, mas pode ser usada por razões de compatibilidade.
Por exemplo, você pode executar o seguinte comando. Use -n version=ci para configurar o sistema de ficheiros XFS para ser insensível a maiúsculas minúsculas.
mkfs.xfs /dev/md0 -f -n version=ci -L datavolume
Recomendação para o sistema de ficheiros de memória persistente
Para a configuração do sistema de ficheiros em dispositivos de Memória Persistente, defina a alocação de blocos para o sistema subjacente para 2 MB. Para mais informações, consulte Considerações Técnicas.
Limitação de arquivo aberto
Seu ambiente de produção pode exigir mais conexões do que o limite padrão de arquivos abertos de 1.024. Pode definir limites suaves e rígidos para 1.048.576. Por exemplo, em RHEL, edite o arquivo /etc/security/limits.d/99-mssql-server.conf para ter os seguintes valores:
mssql - nofile 1048576
Observação
Essa configuração não se aplica aos serviços do SQL Server iniciados por systemd. Para obter mais informações, consulte Como definir limites para serviços no RHEL e no systemd.
Desative a data e hora do último acesso nos sistemas de ficheiros para dados e ficheiros de registo do SQL Server
Para garantir que os discos ligados ao sistema se remontam automaticamente após um reinício, adicione-os ao /etc/fstab ficheiro. Use o UUID (Identificador Universalmente Único) em /etc/fstab para se referir à unidade, em vez de apenas o nome do dispositivo (como /dev/sdc1).
Use o atributo noatime com qualquer sistema de arquivos que armazene dados e arquivos de log do SQL Server. Consulte a documentação do Linux sobre como definir esse atributo. O exemplo seguinte mostra como ativar a noatime opção para um volume montado numa Máquina Virtual Azure.
A entrada do ponto de montagem em /etc/fstab:
UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" /data1 xfs rw,attr2,noatime 0 0
No exemplo anterior, UUID representa o dispositivo que você pode encontrar usando o comando blkid.
Capacidade do subsistema de E/S do SQL Server e da unidade de acesso forçado (FUA)
Certas versões de distribuições Linux suportadas fornecem suporte para a capacidade de subsistema de E/S FUA, que fornece durabilidade de dados. O SQL Server usa o recurso FUA para fornecer E/S altamente eficientes e confiáveis para cargas de trabalho do SQL Server. Para obter mais informações sobre o suporte de FUA pela distribuição Linux e o seu efeito no SQL Server, consulte SQL Server On Linux: Forced Unit Access (FUA) Internals.
O SUSE Linux Enterprise Server 12 SP5, o Red Hat Enterprise Linux 8.0 e o Ubuntu 18.04 introduziram suporte para o recurso FUA no subsistema de E/S. Se você estiver usando o SQL Server 2017 (14.x) 6 e versões posteriores, deverá usar a seguinte configuração para implementação de E/S eficiente e de alto desempenho com o FUA by SQL Server.
Use esta configuração recomendada se as seguintes condições forem atendidas.
SQL Server 2017 (14.x) Update Cumulativo 6 e versões posteriores
Distribuição Linux e versão que suporta a capacidade FUA (começando com Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 ou Ubuntu 18.04)
Sistema de arquivos XFS para armazenamento SQL Server, no kernel Linux 4.18 ou versões posteriores.
Sistema de arquivos ext4 para armazenamento SQL Server, no kernel Linux 5.6 ou versões posteriores.
Observação
Você deve usar o sistema de arquivos XFS para hospedar dados do SQL Server e arquivos de log de transações quando a versão do kernel do Linux for inferior à 5.6. A partir da versão 5.6 do kernel, você pode escolher entre XFS e ext4 com base em seus requisitos específicos.
Subsistema de armazenamento e/ou hardware compatível e configurado para capacidade FUA
Configuração recomendada:
Habilite o sinalizador de rastreamento 3979 como um parâmetro de inicialização.
Use mssql-conf para configurar
control.writethrough = 1econtrol.alternatewritethrough = 0.
Para quase todas as outras configurações que não atendem às condições anteriores, a configuração recomendada é a seguinte:
Habilite o sinalizador de rastreamento 3982 como um parâmetro de inicialização (que é o padrão para o SQL Server no ecossistema Linux) e certifique-se de que o sinalizador de rastreamento 3979 não esteja habilitado como um parâmetro de inicialização.
Use mssql-conf para configurar
control.writethrough = 1econtrol.alternatewritethrough = 1.
Suporte FUA para contêineres do SQL Server implantados no Kubernetes
O SQL Server deve usar armazenamento montado persistente e não
overlayfs.O armazenamento deve usar os sistemas de arquivos XFS ou ext4 e deve suportar FUA (ext4 não suporta FUA no kernel Linux anterior à versão 5.6). Antes de habilitar essa configuração, você deve trabalhar com seu fornecedor de distribuição e armazenamento Linux para garantir que o sistema operacional e o subsistema de armazenamento suportem as opções FUA. No Kubernetes, você pode consultar o tipo de sistema de arquivos usando o seguinte comando, onde
<pvc-name>é o seuPersistentVolumeClaim:kubectl describe pv <pvc-name>Na saída, procure o
fstypedefinido como XFS.O nó de trabalho que hospeda os pods do SQL Server deve estar usando uma distribuição Linux e uma versão que suporte o recurso FUA (começando com o Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 ou Ubuntu 18.04).
Se as condições acima forem atendidas, você pode usar as seguintes configurações de FUA recomendadas.
Habilite o sinalizador de rastreamento 3979 como um parâmetro de inicialização.
Use mssql-conf para configurar
control.writethrough = 1econtrol.alternatewritethrough = 0.
Configurações de kernel e CPU para alto desempenho
A seção a seguir descreve as configurações recomendadas do sistema operacional Linux relacionadas ao alto desempenho e à taxa de transferência para uma instalação do SQL Server. Consulte a documentação da sua distribuição Linux para obter o processo para definir essas configurações. Você pode usar TuneD conforme descrito, para configurar muitas CPUs e configurações de kernel, descritas na próxima seção.
Use TuneD para configurar as definições do kernel
Para os utilizadores do Red Hat Enterprise Linux (RHEL), o perfil de desempenho-rendimento do TuneD configura automaticamente algumas definições do kernel e da CPU (exceto para os C-States). Começando com o RHEL 8.0, um perfil TuneD chamado mssql foi desenvolvido em conjunto com a Red Hat e oferece ajustes mais finos relacionados ao desempenho do Linux para cargas de trabalho do SQL Server. Este perfil inclui o perfil de desempenho de taxa de transferência RHEL, e apresentamos suas definições neste artigo para sua revisão com outras distribuições Linux e versões RHEL sem esse perfil.
Para SUSE Linux Enterprise Server 12 SP5, Ubuntu 18.04 e Red Hat Enterprise Linux 7.x, pode instalar manualmente o tuned pacote. Utilize-o para criar e configurar o mssql perfil conforme descrito na secção seguinte.
Configurações Linux propostas com o perfil mssql do TuneD
O exemplo a seguir fornece uma configuração TuneD para SQL Server no Linux.
[main]
summary=Optimize for Microsoft SQL Server
include=throughput-performance
[cpu]
force_latency=5
[sysctl]
vm.swappiness = 1
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.transparent_hugepages=always
# For multi-instance SQL deployments, use
# vm.transparent_hugepages=madvise
vm.max_map_count=1600000
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
kernel.numa_balancing=0
Se você usa distribuições Linux com versões do kernel maiores que 4.18, comente as seguintes opções conforme mostrado; caso contrário, descomente as seguintes opções se você usar distribuições com versões do kernel anteriores à 4.18.
# kernel.sched_latency_ns = 60000000
# kernel.sched_migration_cost_ns = 500000
# kernel.sched_min_granularity_ns = 15000000
# kernel.sched_wakeup_granularity_ns = 2000000
Para habilitar esse perfil TuneD, salve essas definições em um arquivo tuned.conf na pasta /usr/lib/tuned/mssql e habilite o perfil usando os seguintes comandos:
chmod +x /usr/lib/tuned/mssql/tuned.conf
tuned-adm profile mssql
Verifique se o perfil está ativo, com o seguinte comando:
tuned-adm active
Ou:
tuned-adm list
Recomendação de configurações da CPU
A tabela a seguir fornece recomendações para configurações de CPU:
| Cenário | Valor | Mais informações |
|---|---|---|
| Regulador de frequência da CPU | desempenho | Veja o comando cpupower |
| Bias de Desempenho de Energia | desempenho | Consulte o comando x86_energy_perf_policy |
| min_perf_pct | 100 | Consulte a documentação sobre o Intel p-state |
| Estados C | Apenas C1 | Consulte a documentação do seu Linux ou sistema sobre como garantir que C-States esteja definido apenas como C1 |
Quando utilizas o TuneD conforme descrito, ele configura automaticamente o governador de frequência do CPU e as definições de ENERGY_PERF_BIAS e min_perf_pct. Utiliza o perfil de rendimento-desempenho como base para o mssql perfil. Deve configurar manualmente o parâmetro C-States de acordo com a documentação fornecida pelo Linux ou pelo distribuidor do seu sistema.
Recomendações de configurações de disco
A tabela a seguir fornece recomendações para configurações de disco:
| Cenário | Valor | Mais informações |
|---|---|---|
readahead de disco |
4096 | Consulte o comando blockdev |
| definições de sysctl | kernel.sched_min_granularity_ns = 15000000kernel.sched_wakeup_granularity_ns = 2000000vm.dirty_ratio = 80vm.dirty_background_ratio = 3vm.swappiness = 1 |
Consulte o comando sysctl |
Descrição
vm.swappiness: Este parâmetro controla o peso relativo dado à troca da memória de processo em tempo de execução em comparação com a cache do sistema de ficheiros. O valor padrão deste parâmetro é 60, o que indica a troca de páginas de memória de processos em tempo de execução em comparação com a remoção de páginas de cache do sistema de ficheiros numa proporção de 60:140. Definir o valor para 1 indica uma forte preferência por manter a memória do processo em tempo de execução na memória física à custa da cache do sistema de ficheiros. Como o SQL Server utiliza o buffer pool como cache de página de dados, e prefere fortemente escrever diretamente para o hardware físico, contornando a cache do sistema de ficheiros para uma recuperação fiável, uma configuração agressiva de swappiness pode ser benéfica para um SQL Server dedicado e de alto desempenho.Você pode encontrar informações adicionais em Documentação para /proc/sys/vm/ - #swappiness
vm.dirty_*: Os acessos de gravação de arquivos do SQL Server não são armazenados em cache, satisfazendo seus requisitos de integridade de dados. Esses parâmetros permitem um desempenho de gravação assíncrono eficiente e reduzem o efeito de E/S de armazenamento das gravações em cache do Linux, permitindo cache grande o suficiente enquanto limita a liberação.kernel.sched_*: Estes valores de parâmetros representam a recomendação atual para ajustar o algoritmo de Planeamento Completamente Justo (CFS) no kernel Linux. Melhoram o desempenho das chamadas de I/O de rede e armazenamento no que diz respeito à preempção entre processos e à reativação de threads.
Usar o mssql perfil TuneD configura as vm.swappiness, vm.dirty_*, e kernel.sched_* definições. Tem de configurar manualmente as definições do disco readahead usando o blockdev comando para cada dispositivo.
Definição do kernel para equilíbrio automático NUMA em sistemas NUMA multinódeos
Se instalar o SQL Server num sistema NUMA multinós, a seguinte definição do kernel kernel.numa_balancing está ativada por predefinição. Para permitir que o SQL Server opere com máxima eficiência num sistema NUMA, desative o autobalanceamento NUMA num sistema NUMA com múltiplos nós:
sysctl -w kernel.numa_balancing=0
Usar o perfil mssql TuneD configura a opção kernel.numa_balancing.
Configurações do kernel para espaço de endereço virtual
A configuração padrão do vm.max_map_count (que é 65536) pode não ser alta o suficiente para uma instalação do SQL Server. Por esse motivo, altere o valor vm.max_map_count para pelo menos 262144 para uma implantação do SQL Server e consulte a seção Configurações propostas do Linux usando um perfil mssql do TuneD para ajustes adicionais desses parâmetros do kernel. O valor máximo para vm.max_map_count é 2147483647.
sysctl -w vm.max_map_count=1600000
Usar o perfil mssql TuneD configura a opção vm.max_map_count.
Deixar Transparent Huge Pages (THP) ativado
A maioria das instalações Linux tem esta opção ativada por defeito. Para uma experiência de desempenho mais consistente, mantenha esta opção de configuração ativada. No entanto, se houver elevada atividade de paginação de memória em implementações SQL Server com múltiplas instâncias, ou em execução SQL Server com outras aplicações que consomem memória no servidor, teste o desempenho da sua aplicação após executar o seguinte comando:
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
Ou modifique o perfil mssql TuneD com a linha:
vm.transparent_hugepages=madvise
E certifique-se de que o mssql perfil está ativo após a modificação:
tuned-adm off
tuned-adm profile mssql
Usar o perfil mssql TuneD configura a opção transparent_hugepage.
Recomendações de configuração de rede
Além das recomendações de armazenamento e CPU, também tens recomendações específicas para a rede. As seguintes recomendações estão listadas para referência. Nem todas as configurações nos exemplos a seguir estão disponíveis em diferentes NICs. Contate e consulte fornecedores de NIC para obter orientação sobre cada uma destas opções. Teste e configure isso em ambientes de desenvolvimento antes de aplicá-los em ambientes de produção. As opções a seguir são explicadas com exemplos, e os comandos usados são específicos para o tipo de NIC e o fornecedor.
Configurando o tamanho do buffer da porta de rede. No exemplo, a NIC chama-se
eth0, que é uma NIC baseada em Intel. Para NIC baseada em Intel, o tamanho de buffer recomendado é de 4 KB (4096). Verifique os máximos predefinidos e configure-os usando o exemplo a seguir:Verifique os máximos predefinidos com o seguinte comando. Substitua
eth0pelo nome da NIC:ethtool -g eth0Defina o tamanho do buffer
rx(receber) etx(transmitir) para 4 KB:ethtool -G eth0 rx 4096 tx 4096Verifique se o valor está configurado corretamente:
ethtool -g eth0Ativar quadros jumbo. Antes de habilitar quadros jumbo, verifique se todos os switches de rede, roteadores e qualquer outro dispositivo essencial no caminho do pacote de rede entre os clientes e o SQL Server suportam quadros jumbo. Só então é que a ativação de frames jumbo pode melhorar o desempenho. Depois de os quadros jumbo estarem ativados, ligue-se ao SQL Server e altere o tamanho do pacote de rede para 8060 usando
sp_configure, como mostrado no exemplo seguinte:# command to set jumbo frame to 9014 for a Intel NIC named eth0 is ifconfig eth0 mtu 9014 # verify the setting using the command: ip addr | grep 9014EXECUTE sp_configure 'network packet size', '8060'; GO RECONFIGURE WITH OVERRIDE; GOPor defeito, configure a porta para coesão adaptativa de IRQ RX/TX, o que significa que a entrega de interrupções é ajustada para melhorar a latência quando a taxa de pacotes é baixa e otimizar o throughput quando a taxa de pacotes é elevada. Esta configuração pode não estar disponível em toda a sua infraestrutura de rede, por isso reveja a infraestrutura de rede existente e confirme que esta configuração é suportada. O exemplo é para a NIC chamada
eth0, que é uma NIC baseada em Intel:Defina a porta para a coalescência adaptativa RX/TX IRQ:
ethtool -C eth0 adaptive-rx on ethtool -C eth0 adaptive-tx onConfirme a configuração:
ethtool -c eth0
Observação
Para comportamentos previsíveis em ambientes de alto desempenho, como ambientes para benchmarking, desative a coalescência adaptativa do IRQ RX/TX e depois defina especificamente a coalescência da interrupção RX/TX. Veja os comandos de exemplo para desativar a coalescência do IRQ RX/TX e, em seguida, defina especificamente os valores:
Desative a coligação adaptativa RX/TX IRQ:
ethtool -C eth0 adaptive-rx off ethtool -C eth0 adaptive-tx offConfirme a alteração:
ethtool -c eth0Defina os parâmetros
rx-usecseirq.rx-usecsespecifica quantos microssegundos após pelo menos um pacote ser recebido antes de gerar uma interrupção. O parâmetroirqespecifica os atrasos correspondentes na atualização do status quando a interrupção é desabilitada. Para NICs de bases Intel, você pode usar as seguintes configurações:ethtool -C eth0 rx-usecs 100 tx-frames-irq 512Confirme a alteração:
ethtool -c eth0Ative a escalabilidade do lado de receção (RSS) e, por defeito, combine o lado RX e TX das filas RSS. Existem cenários específicos, ao trabalhar com o Suporte Microsoft, em que desativar o RSS também melhora o desempenho. Teste essa configuração em ambientes de teste antes de aplicá-la em ambientes de produção. O exemplo a seguir é para NICs Intel.
Obtenha os valores máximos predefinidos:
ethtool -l eth0Combine as filas com o valor especificado no valor máximo "Combinado" predefinido. Neste exemplo, o valor é definido como
8:ethtool -L eth0 combined 8Verifique a configuração:
ethtool -l eth0Trabalhe com a afinidade de IRQ da interface NIC. Para alcançar o desempenho esperado ajustando a afinidade IRQ, considere alguns parâmetros importantes, como a gestão da topologia do servidor pelo Linux, stack do driver NIC, definições padrão e definições do
irqbalance. As otimizações das definições de afinidades IRQ da porta da NIC são feitas com o conhecimento da topologia do servidor, desativando oirqbalance, e utilizando as definições específicas do fornecedor da NIC.O exemplo a seguir da infraestrutura de rede específica do Mellanox ajuda a explicar a configuração. Para obter mais informações e para baixar as ferramentas mlnx do Mellanox, consulte Ferramentas de ajuste de desempenho para adaptadores de rede Mellanox. Os comandos mudam com base no ambiente. Entre em contato com o fornecedor da NIC para obter mais orientações.
Desative
irqbalanceou obtenha um instantâneo das configurações de IRQ e force o daemon a sair:systemctl disable irqbalance.serviceOu:
irqbalance --oneshotCertifique-se de que
common_irq_affinity.shé executável:chmod +x common_irq_affinity.shExibir afinidade IRQ para a porta Mellanox NIC (por exemplo,
eth0):./show_irq_affinity.sh eth0Otimize para obter o melhor desempenho de taxa de transferência com uma ferramenta Mellanox:
./mlnx_tune -p HIGH_THROUGHPUTDefina a afinidade de hardware para o nó NUMA que hospeda fisicamente a NIC e sua porta:
./set_irq_affinity_bynode.sh `\cat /sys/class/net/eth0/device/numa_node` eth0Verifique a afinidade de IRQ:
./show_irq_affinity.sh eth0Adicionar otimizações de coalescência de IRQ
ethtool -C eth0 adaptive-rx off ethtool -C eth0 adaptive-tx off ethtool -C eth0 rx-usecs 750 tx-frames-irq 2048Verifique as configurações:
ethtool -c eth0Depois de fazer as alterações anteriores, verifique a velocidade da NIC para garantir que corresponde às suas expectativas usando o seguinte comando:
ethtool eth0 | grep -i Speed
Configuração avançada do kernel e do SO
Para obter o melhor desempenho de I/O de armazenamento, utilize o agendamento de múltiplas filas do Linux para dispositivos de bloco. Este método de agendamento permite que o desempenho da camada de blocos escale bem com discos de estado sólido (SSDs) rápidos e sistemas multicore. Consulta a documentação para ver se a tua distribuição Linux o ativa por defeito. Na maior parte dos outros casos, podes arrancar o kernel com
scsi_mod.use_blk_mq=ypara o ativar. A documentação da tua distribuição Linux pode ter mais orientações sobre esta definição. Esta configuração é consistente com o kernel Linux upstream.Como a multipath I/O é frequentemente usada em implementações SQL Server, configure o alvo multiqueue do device mapper (DM) para usar a
blk-mqinfraestrutura, ativando adm_mod.use_blk_mq=yopção de arranque do kernel. O valor padrão én(desabilitado). Esta configuração reduz a sobrecarga de bloqueio na camada DM quando os dispositivos SCSI subjacentes usamblk-mq. Para obter mais informações sobre como configurar E/S multipath, consulte a documentação da sua distribuição Linux.
Configurar arquivo de permuta
Certifique-se de ter um arquivo de permuta configurado corretamente para evitar problemas de falta de memória. Consulte a documentação do Linux para saber como criar e dimensionar corretamente um arquivo de troca.
Máquinas virtuais e memória dinâmica
Se você estiver executando o SQL Server no Linux em uma máquina virtual, certifique-se de selecionar opções para corrigir a quantidade de memória reservada para a máquina virtual. Não use recursos como Hyper-V Memória Dinâmica.
Configuração do SQL Server
Execute as seguintes tarefas de configuração após instalar o SQL Server no Linux para obter o melhor desempenho para a sua aplicação.
Melhores práticas
Use PROCESS AFFINITY para nodos e/ou CPUs
Use ALTER SERVER CONFIGURATION para definir PROCESS AFFINITY para todos os NUMANODEs e CPUs que está a usar para o SQL Server (que normalmente é para todos os NODES e CPUs) num sistema operativo Linux. A afinidade do processador ajuda a manter um comportamento eficiente de agendamento Linux e SQL. Usar a opção NUMANODE é o método mais simples. Use PROCESS AFFINITY mesmo se você tiver apenas um único nó NUMA no seu computador. Para obter mais informações sobre como definir PROCESS AFFINITY, consulte o artigo ALTER SERVER CONFIGURATION.
Configurar vários ficheiros de dados tempdb
Como uma instalação do SQL Server no Linux não oferece uma opção para configurar vários arquivos tempdb, recomendamos que você considere a criação de vários arquivos de dados tempdb após a instalação. Para obter mais informações, consulte as orientações no artigo Recomendações para reduzir a contenção de alocação no banco de dados tempdb do SQL Server.
Configuração avançada
As recomendações a seguir são definições de configuração opcionais que você pode optar por executar após a instalação do SQL Server no Linux. Essas opções são baseadas nos requisitos da sua carga de trabalho e configuração do seu sistema operacional Linux.
Definir um limite de memória com mssql-conf
Para garantir que há memória física livre suficiente para o sistema operativo Linux, o processo SQL Server utiliza apenas 80% da RAM física por defeito. Para alguns sistemas com grandes quantidades de RAM física, 20% pode ser um número significativo.
Por exemplo, em um sistema com 1 TB de RAM, a configuração padrão deixaria cerca de 200 GB de RAM sem uso. Nessa situação, convém configurar o limite de memória para um valor mais alto. Pode ajustar este valor com a ferramenta mssql-conf . Para mais informações, consulte a definição memory.memorylimitmb que controla a memória visível para o SQL Server (em unidades de MB).
Observação
Também pode configurar um limite de memória usando a MSSQL_MEMORY_LIMIT_MB variável de ambiente. Este método é comumente usado ao implementar containers ou automatizar implementações baseadas em contentores ou pacotes SQL Server. A MSSQL_MEMORY_LIMIT_MB variável ambiente tem prioridade sobre o memory.memorylimitmb cenário.
Ao alterar essa configuração, tenha cuidado para não definir esse valor muito alto. Se você não deixar memória suficiente, você pode ter problemas com o sistema operacional Linux e outros aplicativos Linux.
Configurar limites de memória com grupo de controle (cgroup) v2
A partir do SQL Server 2025 (17.x) e do SQL Server 2022 (16.x) CU 20, o SQL Server deteta e respeita as restrições do grupo de controlo (cgroup) v2, melhorando a estabilidade de desempenho e o isolamento de recursos em ambientes Docker, Kubernetes e OpenShift. Os grupos de controle permitem um controle refinado no kernel Linux sobre os recursos do sistema, como CPU e memória.
Com o suporte ao cgroup v2, o SQL Server reduz erros de falta de memória (OOM) observados anteriormente em implantações em contêineres, particularmente em clusters Kubernetes (por exemplo, AKS v1.25+), onde os limites de memória definidos nas especificações do contêiner não foram impostos.
Verifique a versão do cgroup
stat -fc %T /sys/fs/cgroup
Os resultados são os seguintes:
| Result | Descrição |
|---|---|
cgroup2fs |
Você está usando o cgroup v2 |
cgroup |
Você está usando o cgroup v1 |
Mudar para cgroup v2
O caminho mais fácil é escolher uma distribuição que suporte cgroup v2 fora da caixa.
Se você precisar alternar manualmente, adicione a seguinte linha à sua configuração do GRUB:
systemd.unified_cgroup_hierarchy=1
Em seguida, execute o seguinte comando para atualizar o GRUB:
sudo update-grub
Para obter mais informações, consulte os seguintes recursos:
- Guia de início rápido: implantar um contêiner Linux do SQL Server no Kubernetes usando gráficos Helm
- Documentação do Linux Kernel cgroup v2
- Grupo de Controlo v2
Diretrizes para definir limites de memória
Ao definir limites de memória para SQL Server no Linux, considere as seguintes diretrizes:
Use
cgrouppara limitar a memória total disponível para o contentor. Esta definição estabelece o limite superior para todos os processos dentro do contentor.O limite de memória (seja definido por
memorylimitmbou pelaMSSQL_MEMORY_LIMIT_MBvariável de ambiente) controla a memória total que o SQL Server no Linux pode alocar em todos os seus componentes, como o buffer pool, SQLPAL, SQL Server Agent, LibOS, PolyBase, Full-Text Search e qualquer outro processo carregado no SQL Server no Linux.A variável de ambiente
MSSQL_MEMORY_LIMIT_MBtem precedência sobre a definida emmemorylimitmbmssql.conf.memorylimitmbnão pode exceder a memória física real do sistema anfitrião.Defina
memorylimitmbmenos do que a memória do sistema anfitrião e o limite cgroup (se existir), para garantir que há memória física livre suficiente para o sistema operativo Linux. Se não definirmemorylimitmbexplicitamente , o SQL Server usa 80% do valor menor entre a memória total do sistema e o limite cgroup (se existir).A opção de configuração max_server_memory servidor limita apenas o tamanho do buffer pool do SQL Server e não regula o uso total de memória do SQL Server no Linux. Defina sempre este valor abaixo de
memorylimitmbpara garantir que memória suficiente permaneça para outros componentes, como SQLPAL, SQL Server Agent, LibOS, PolyBase, Pesquisa de Texto Completo e qualquer outro processo carregado no SQL Server no Linux.