SQL Server DBのパフォーマンスがハードウェアに制限されているかどうかを確認するにはどうすればよいですか?


8

現在シングルユーザーの負荷がかかっているアプリのテスト-テストデータが本番サイズ(テーブルあたり400k〜2M行)に増加したため、一部のSELECT spは十分に高速ではなくなりました(テストデータが限られているため、以前はそれぞれ30ミリ秒未満でしたが、現在は100〜200ミリ秒ですが、数ミリ秒あるため、UIで遅延が明らかになっています)。


ハードウェアではなくコードとデザインであることがほぼ保証されています...
gbn

クエリで分析関数を利用できる場合、SQL Server 2000はソフトウェアで制限されています。
bernd_k

まあ、それは少なくとも完全にハードウェアではありません-2008 Expressのインスタンスをテストマシンに並べて配置しました。2000回は同じ範囲内で、2008年はすべて20ミリ秒未満です。ウェイトスタットは違いを明確にしていないようです。統計を消去した後、同じアプリのテストで、2000のPAGEIOLATCH_SH待機時間は2.48秒、平均待機時間は4ミリ秒でした。2008年は2.14秒、平均待機時間は2ミリ秒でした。どちらが優れていますが、実際の応答時間の10倍の改善については説明していません。これは、統計に反映されていない、2000年から2008年までの一般的なエンジンの機能強化だけですか?
パスタメージ

回答:


8

使用できますDBCC SQLPERF("waitstats")。これは、SQLサーバーが待機していたタスクの待機時間を返します。各カウンターの詳細な説明はオンラインで見つけることができます。この情報を使用して、ボトルネックを見つけることができます。

また、クエリアナライザーでクライアント統計をオンにして、クライアント側の待機時間を確認します。

最初のテスト以降、ハードウェアは変更されていないと想定しています。したがって、ハードウェアは一定であるため、疑いはありません。


waitstatsから関連情報を注文してフィルターするためにいくつかのクエリを取得しましたが、あまりわかりませんでした(元のアイテムに関する私のコメントを参照)。
パスタメージ

@Pastymageは、SQL 2000 DBでsp_updatestatsを実行してみます。クエリを再試行して、パフォーマンスが向上するかどうかを確認します。
StanleyJohns 2011年

いいえ、まったく同じです。Ditto for DBCC updateusage。
パスタメージ2011年

2

考え:

  • ハードウェアが問題になることはほとんどありません。デザインとコードが貧弱です。
  • 常に生産に近いデータの品質と量でテストする

いくつかの解決策:

不足しているインデックスDMVを実行して、不足しているインデックスを確認します。

SELECT 
  migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS improvement_measure, 
  'CREATE INDEX [missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + CONVERT (varchar, mid.index_handle) 
  + '_' + LEFT (PARSENAME(mid.statement, 1), 32) + ']'
  + ' ON ' + mid.statement 
  + ' (' + ISNULL (mid.equality_columns,'') 
    + CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END 
    + ISNULL (mid.inequality_columns, '')
  + ')' 
  + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement, 
  migs.*, mid.database_id, mid.[object_id]
FROM sys.dm_db_missing_index_groups mig
INNER JOIN sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle
WHERE migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) > 10
ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC

...そして最も高価なDMVクエリ

SELECT TOP 20
    qs.sql_handle,
    qs.execution_count,
    qs.total_worker_time AS Total_CPU,
    total_CPU_inSeconds = --Converted from microseconds
    qs.total_worker_time/1000000,
    average_CPU_inSeconds = --Converted from microseconds
    (qs.total_worker_time/1000000) / qs.execution_count,
    qs.total_elapsed_time,
    total_elapsed_time_inSeconds = --Converted from microseconds
    qs.total_elapsed_time/1000000,
    st.text,
    qp.query_plan
FROM
    sys.dm_exec_query_stats AS qs
        CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
        CROSS apply sys.dm_exec_query_plan (qs.plan_handle) AS qp
ORDER BY qs.total_worker_time DESC

それ以外の場合、このSOの質問は、私や他のSQL高担当者タイプから良いヒントがあります:https://stackoverflow.com/q/4118156/27535(私はすべての3つの長めの答えをコピー/ペーストしません)


これらのDMVは2005+のための素晴らしいですが、2000年に作業をしないでください
SqlSandwiches

@SqlSandwiches:おっと、それを逃した。
gbn 2011年

私がセットアップした2008 Expressインスタンスでこれを試しました-dm_exec_query_statsが存在しないようです?
パスタメージ

1

システムリソースをログに記録するか、タスクマネージャーを見て、プロセスで使用されているシステムリソースの数を確認します。


1

考慮すべき興味深いことは、実行中のMSSQL 2000のバージョンです。

バイナリには4つのバージョンがあります

  1. 急行
  2. 標準
  3. プロフェッショナル
  4. 企業

これらの各バージョンには、RAMとCPUに関して制限があります。

現在保存されているデータの量が、MSSQL 2000のバージョンの機能を超えて、クエリ/サブクエリを実行するために追加のRAMが必要になるか、CPU使用率が不十分である可能性を探る価値があります。バイナリバージョンをMSSQL 2000 Entrpriseバージョン(おそらく、MSSQLのバージョンが古くなっているので長い目で見たもの)、または予算に余裕のある最高のバージョンにアップグレードする必要があるかもしれません。

2008年が最新であり、現在サポートが利用可能であるため、MSSQL 2000から抜け出すこともできます。繰り返しますが、これは予算の問題になる可能性があります。すでにエンタープライズを使用している場合、または予算でメジャーアップグレードを許可できない場合は、DB統計またはDB設計を検討できます。

免責事項:私はSQL ServerのDBAではありません


2008 Expressに1 CPU 1 GB RAMの制限がある2008 Expressでも問題が完全に解決されたため、2008へのアップグレードは簡単な修正のようです。それでも、理由/方法を理解したいと思います ...
Pastymage
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.