データベースのパフォーマンスを向上させるために、tempdb
を同じサイズの2つのファイルに分割したいと思います。
これら2つのデータファイルは、ログやユーザーデータファイルとは別に、同じディスク上にあるのでしょうか。
当店ではさまざまなインストールを行っており、4つのtempdbファイルから始めて、@ Kevin3nfsコメントで指摘されているtempdbの競合がある場合は追加のファイルを追加する傾向にあり、SQLSkills.com検索を参照しています。
Microsoftはナレッジベースの記事を持っています: SQL Server tempdbデータベースでの割り当ての競合を減らすための推奨事項
[...]
原則として、論理プロセッサの数が8以下の場合は、論理プロセッサと同じ数のデータファイルを使用します。論理プロセッサの数が8より大きい場合は、8つのデータファイルを使用し、競合が続く場合は、競合が許容レベルに減少するか、または競合が発生するまで、データファイルの数を4の倍数(論理プロセッサの数まで)増やします。ワークロード/コードの変更。
[...]
SQLSKills.comには良い記事があります 偶発的なDBA(30/27日目):トラブルシューティング:Tempdb競合 tempdbの競合に関する一般的な情報と、tempdbの競合に関する情報を取得するスクリプトの少し下にあります。一部のDMVから。
[...]
世界中のSQL Serverインスタンスに存在する最も一般的なパフォーマンスの問題の1つは、tempdb競合として知られています。どういう意味ですか?Tempdbの競合は、メモリ内にある割り当てページにアクセスしようとするスレッドのボトルネックを指します。 I/Oとは関係ありません。
小さな一時テーブルを作成、使用、削除する数百の同時クエリのシナリオを考えてみます(その性質上、常にtempdbに格納されます)。一時テーブルが作成されるたびに、データページと、テーブルに割り当てられたデータページを追跡するための割り当てメタデータページを割り当てる必要があります。これには、これらの2つのページがデータベースに割り当てられていることを、割り当てページ(PFSページと呼ばれます-詳細についてはこちらを参照)でメモする必要があります。一時テーブルが削除されると、それらのページは割り当て解除され、そのPFSページで再度そのようにマークする必要があります。割り当てページを変更できるスレッドは一度に1つだけであり、それがホットスポットになり、全体的なワークロードが遅くなります。 [...]
以下は、非常に大規模なデータベースサーバー構成に使用したスクリプトです。自動拡張なしの11GBサイズの8つのファイルと、11GBのtempdbトランザクションログファイルを含むtempdbを作成します。このスクリプトは、要件に適合させることができます。
USE [master]
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'tempdev',FILENAME = N'G:\tempdb.mdf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev2', FILENAME = N'G:\tempdb2.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev3', FILENAME = N'G:\tempdb3.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev4', FILENAME = N'G:\tempdb4.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev5', FILENAME = N'G:\tempdb5.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev6', FILENAME = N'G:\tempdb6.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev7', FILENAME = N'G:\tempdb7.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev8', FILENAME = N'G:\tempdb8.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'templog', FILENAME = N'G:\templog.ldf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
ご覧のとおり、これらのファイルはすべて同じドライブにありました。
それでもtempdb
データベースの競合に気づいた場合は、tempdb
データベースファイルをさまざまなディスクに分割することも考えられる解決策ですが、構成(SAN、SSDなど)に依存しません。テストで検証する必要があります。
はい、同じディスクでも、複数のtempdbでパフォーマンスが向上するはずです。経験則はコアの数です。
ベストプラクティスは、プロセッサの数と一致する複数のサイズのTEMPDBデータファイルを維持することです(最大8つまでで、ほとんどの環境で十分です)。
--Find logical processors
SELECT cpu_count AS logicalCPUs FROM sys.dm_os_sys_info
--Add tempdb data files as per processor count from the above query.Sample query to add one file.Modify the code as per your environment
ALTER DATABASE tempdb ADD FILE ( NAME = N'tempdev2',
FILENAME = N'F:\Temdb\tempdev2.ndf' , SIZE =10MB , FILEGROWTH = 20MB)