SQLServerのパフォーマンスチューニングでは、tempdbのデータファイル数とログファイル数を、CPUコア数に合わせるのは必須。
SQLServerをLinuxにインストールした場合、データファイルとログファイルが1ファイルづつしか作られないので、手動で CPUコア数分、ファイルを追加する必要がある 。
下記は、CPU論理コア×4 の CentOS で稼働しているSQLServerの、tempdb にデータファイル、ログファイルを追加する手順。
1. CentOSのコンソールで、sqlcmdを使ってSQLServerにログイン。
1 2 3 4 5 6 7 |
# sqlcmd -S localhost -U sa Password:(パスワード) > USE [master] > GO |
2. 既存tempdb ファイルの拡張設定を、64MB毎から10%毎へ変更。
1 2 3 4 5 |
> ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'tempdev', FILEGROWTH = 10%) > ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'templog', FILEGROWTH = 10%) > GO |
3. 既存tempdb の名称をナンバリング有りの名称に変更。
1 2 3 4 5 |
> ALTER DATABASE [tempdb] MODIFY FILE (NAME=N'tempdev', NEWNAME=N'tempdev1') > ALTER DATABASE [tempdb] MODIFY FILE (NAME=N'templog', NEWNAME=N'templog1') > GO |
4. tempdb ファイル数をコア数に合わせて追加。
1 2 3 4 5 6 7 8 9 |
> ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev2', FILENAME = N'/var/opt/mssql/data/tempdb2.mdf' , SIZE = 8192KB , FILEGROWTH = 10% , MAXSIZE = UNLIMITED) > ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev3', FILENAME = N'/var/opt/mssql/data/tempdb3.mdf' , SIZE = 8192KB , FILEGROWTH = 10% , MAXSIZE = UNLIMITED) > ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev4', FILENAME = N'/var/opt/mssql/data/tempdb4.mdf' , SIZE = 8192KB , FILEGROWTH = 10% , MAXSIZE = UNLIMITED) > ALTER DATABASE [tempdb] ADD LOG FILE ( NAME = N'templog2', FILENAME = N'/var/opt/mssql/data/templog2.ldf' , SIZE = 8192KB , FILEGROWTH = 10% , MAXSIZE = UNLIMITED) > ALTER DATABASE [tempdb] ADD LOG FILE ( NAME = N'templog3', FILENAME = N'/var/opt/mssql/data/templog3.ldf' , SIZE = 8192KB , FILEGROWTH = 10% , MAXSIZE = UNLIMITED) > ALTER DATABASE [tempdb] ADD LOG FILE ( NAME = N'templog4', FILENAME = N'/var/opt/mssql/data/templog4.ldf' , SIZE = 8192KB , FILEGROWTH = 10% , MAXSIZE = UNLIMITED) > GO |
5. UNLIMITEDにならないSQLServerのバグに対処。
1 2 3 4 5 6 |
> ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'templog2', MAXSIZE = UNLIMITED) > ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'templog3', MAXSIZE = UNLIMITED) > ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'templog4', MAXSIZE = UNLIMITED) > GO |
テストした環境
OSのバージョン:CentOS Linux release 7.6.1810 (Core)
SQLServerのバージョン:Microsoft SQL Server 2017 (RTM-CU15-GDR) (KB4505225) – 14.0.3192.2 (X64) Jun 15 2019 00:45:05 Copyright 2017 Microsoft Corporation Developer Edition (64-bit) on Linux (CentOS Linux 7 (Core))
参考
RHEL 7 にツールをインストールします。
パフォーマンスのベスト プラクティスと SQL Server on Linux の構成ガイドライン
Tempdb データベースを SQL Server に割り当て時の競合を減らすための推奨事項
最新のSQLServerでバグを見つけました
コメント