sqlserver on linux一些推荐的性能配置

关于sqlserver on linux推荐的性能配置,官方文档中给出了配置建议,但部分参数没有给设置方法,可参考以下文档设置。原文很长,大部分为linux基础,下面只摘了一些性能相关设置,完整版参考

https://masayukiozawa.github.io/sol-skillupdate/#sql-server-%E3%81%AE%E8%A8%AD%E5%AE%9A%E5%A4%89%E6%9B%B4

 

 

ベストプラクティス

Performance best practices and configuration guidelines for SQL Server 2017 on Linux

SQL Server on Linux

SQL Server の設定

PROCESS AFFINITY の指定

ALTER SERVER CONFIGURATION  
SET PROCESS AFFINITY NUMANODE = 0 TO 

tempdb のデータファイルの分割

SQL Server on Linux は、インストール時の tempdb 分割が行われないため、インストール後に分割する。

mssql-conf ツールを使用したメモリ設定

$ sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 4096
$ sud systemctl restart mssql-server

デフォルトでは SQL Server が使用するメモリは 80% に制限されているため、大容量のメモリを搭載している場合、残りの 20% のサイズによっては、上限緩和を検討する。
(本設定は SQL Server の max server memroy とは別の設定)

設定の解除

sudo /opt/mssql/bin/mssql-conf unset memory.memorylimitmb 
systemctl restart mssql-server

Linux の設定

  • PASS Summit 2017 - SQL Server on Linux: DBA focused lessons learned from early deployments
  • Inside SQL Server 2017 on Linux
  • SQL Server 2017 on Linux - Administration
  • How to safeguard SQL Server on Linux from OOM-Killer

CPU

CPU の電力制御のユーティリティ

# apt install -y cpufrequtils
# cpufreq-info

CPU クロックのガバナー

$ sudo cpupower frequency-info
$ sudo cpupower frequency-set -g performance

パフォーマンスと電源消費効率のバランス

# x86_energy_perf_policy -v 'performance'

CPU クロックの下限

tuned を使用して設定を実施

min_perf_pct=100
  • 2.5. TUNED および KTUNE

C-State

C1 のみにする

$ sudo vi /etc/default/grub
====
GRUB_CMDLINE_LINUX_DEFAULT="intel_idle.max_cstate=1"
====
$ sudo update-grub
$ reboot
  • How to set intel_idle.max_cstate=1

ディスク

Read-Ahead のブロックサイズ

# blockdev --report
# blockdev -v --setra 4096 /dev/sda

sysctl によるカーネルパラメーターの変更

  • 設定の確認
    $ cat /proc/sys/kernel/sched_min_granularity_ns
    
$ sudo sysctl -a
  • 設定の変更
    $ sudo sysctl -w kernel.sched_min_granularity_ns=10000000
    $ sudo sysctl -w kernel.sched_wakeup_granularity_ns=15000000
    $ sudo sysctl -w vm.dirty_ratio=40
    $ sudo sysctl -w vm.dirty_background_ratio=10
    $ sudo sysctl -w vm.swappiness=10
    $ sudo sysctl -p
    

NUMA

複数 NUMA ノード環境での自動 NUMA バランシングの無効化

$ sudo sysctl -w kernel.numa_balancing=0
$ sudo sysctl -p

仮想アドレス空間

メモリマップ数の上限の変更 (65536 (64KB) -> 262144 (256KB))

$ sudo sysctl -w vm.max_map_count=262144
$ sudo sysctl -p

マウントオプション

SQL Server のデータ/ログファイルのファイルシステムのマウントオプションの設定 (relatime -> noatime)

  • 設定の確認
    # mount
    または、
    # cat /proc/mounts
    
  • 設定の変更
    # vi /etc/fstab
    ====
    該当のボリュームに「noatime」オプションを追加する
    ====
    
  • 3.9. RELATIME ドライブアクセス最適化
    ※国内のブログの検証結果では、realtime / noattime の変更による明確な性能差は確認できないという情報が多い

Huge Page

透過的な Huge Page の有効化

ほとんどの Linux 環境では有効になっている。

# cat /sys/kernel/mm/transparent_hugepage/enabled
# cat /proc/meminfo
  • How to disable Transparent Huge Pages (THP) in Ubuntu 16.04LTS
  • Red Hat Enterprise Linux 7 で transparent hugepages (THP) を無効にする
  • Huge Page まとめ

Swap ファイル

swap ファイルの適切な設定

  • swap ファイルの確認
# swapon
または、
# cat /proc/swaps
  • swap の有効化
    # swapon /dev/dm-1
    
  • Ubuntu 16.10 その79 - スワップ領域をパーティションからファイルに移行させるには
  • 【 swapon 】スワップ領域を有効にする

  • swap の無効化
    •  【 swapoff 】スワップ領域を無効にする
      swapoff /dev/dm-1
      

      「swapoff failed: Cannot allocate memory 」のメッセージが表示された場合は、スワップファイルの内容をメモリに移動させることができない状態となっている

  • swap ファイルのサイズ変更
    • swapサイズ変更手順(ファイル割当)

仮想マシンでの実行

動的メモリ割り当て (Dynamic Memory) を使用しない

仮想マシンのメモリ割り当てとして、動的メモリ割り当てによる可変的なメモリ割り当てを実行しない

OOM Killer

OOM (Out of Memory) Killer という動作が存在していることの認識

メモリ/スワップの枯渇の可能性が出た場合に、メモリを消費しているプロセスを停止させる動作

  • OOM Killer に対しての考慮
    • mssql-conf で memory.memorylimitmb を適切に設定
    • swap ファイルのサイズを適切に設定
  • OOM Killer の対象となりえるプロセスの確認
    # echo "-17" > /proc/[pid]/oom_adj
    # ps -e | grep "sqlservr" | awk '{system("echo -17 > /proc/"$1"/oom_adj")}'
    

    cron による設定

    # sudo echo '*/1 * * * * root ps -e | grep "sqlservr" | awk '\''{system("echo -1000 > /proc/"$1"/oom_score_adj")}'\'' > /dev/null 2>&1' > /etc/cron.d/sqlservr_oom
    または、
    # sudo echo '*/1 * * * * root ps -e | grep "sqlservr" | awk '\''{system("echo -17 > /proc/"$1"/oom_adj")}'\'' > /dev/null 2>&1' > /etc/cron.d/sqlservr_oom
    
  • OOM Killer の設定の確認
    $ sudo syscat /var/log/syslog | grep Killedctl -r | grep "oom"
    
  • OOM Killer のログの確認
    # cat /var/log/syslog | grep -i Killed
    
  • Linux OOM Killerについて
  • LinuxにおけるOOM発生時の挙動
  • メモリ不足時に大事なプロセスが OOM Killer に殺されないようにする
  • エラーログに対応する~OOM Killer編
  • OOM Killer – How To Create OOM Exclusions in Linux
  • Linux - OOM Killer の発動を抑制!
  • linux/mm/oom_kill.c

事前の IO 検証

  • FIO / dd / Iometer 等による事前のディスク性能の検証
  • SQL Server on Linux では、ファイルの瞬時初期化はデフォルトで有効となっている
  • マウントしたドライブを使用している場合「/etc/fstab」の「noattime」の設定の有効化

你可能感兴趣的:(sqlserver,linux)