SQL Serverで発生するパフォーマンスの上位3つの問題は何ですか?


15

私はアイントホーフェンのフォンティス大学の学生です。現在、SQL Serverツールの開発を支援するために一連のインタビューを実施しています。この分野の専門家からフィードバックをもらいたいと思います。

私の質問の1つは次のとおりです。

SQL Serverインスタンスで発生する上位3つのパフォーマンスの問題と、それらの問題の特定方法を教えてください。

特に、これを測定するために使用されるスクリプトとツールに興味があります。

回答:


22

私の頭の外-上位3つのクエリの問題:

  • 暗黙的な変換
  • 不適切なインデックス戦略(多すぎる、または十分でない、または種類が間違っている)
  • 必要なフィールドだけに名前を付ける代わりにSELECT *を使用する

サーバーレベルの構成の問題、データベーススキーマの問題、ハードウェアの問題などにはさらに多くの問題があります。これらの種類の問題を探してサーバーをすばやく分析するスクリプトを作成しました。

http://www.brentozar.com/blitz/


15
  • 不十分な設計/クエリ/インデックス作成
  • 正しいハードウェアを購入することはできません
  • Braindead ORM(別名「SQL is dead」)

14

上位3位ではありませんが、まだ言及されていないものに言及すると思いました。

  1. SQLは、DBAに提供される詳細/透明度なしで仮想マシンに配置されます。ホストサーバーは、ゲストマシンの設定を動的に変更し、パフォーマンスの低下を引き起こし、DBAに手がかりを与えません。ハイパートレッド、ネットワークチーミング、メモリバルーニングなどの機能により、パフォーマンスカウンターは監視対象の移動ターゲットになります。Tools: sysmon/perfmon, DMVs, maintaining a history of performance counters in tables.
  2. 同様に、DBAに提供されるSAN設定の透明性/検証性はありません。読み取り/書き込みキャッシュ設定が異なるLUNがありましたが、それらはすべて同じであると伝えました。Tools: IO DMVs, SQLIO.
  3. 悪いDBアーキテクチャ:データファイルとログファイルのサイズと配置、およびtempdbなど。並列処理の不適切な使用。同じ物理ディスク上に複数のファイルグループを作成します。Tools: experience.

私が今チェックアウトしている別のツールはProject Lucyです。きちんとしたようです。


10
  • 適切なインデックスがない
  • 誰かが実稼働コードでnolockを使用して、パフォーマンスの問題を解決しようとします。コードがテーブル内のデータを変更する場合は特に悪い
  • 必要以上に多くのデータを選択するアプリケーション。同じテーブルのテキストデータだけが必要な場合でも、毎回バイナリが返される例。

2
ノーロックについては+1。私が知っているすべての開発者は、「テーブルを読み取り値にロックしない」ため、それを使用することをお勧めします
-tucaz

あなたの顧客の一人がマルチマネー用の巨大なシステムを購入したとき、それを嫌いではありませんか?それから...:-/
マーティン・ショーベルグ

9

ひどくスケーリングするクエリ(合計データや、ひどく計算された他の平均データを含むすべての注文ラインを含む、すべての顧客などのX年間のすべての注文を取得します)

すべてを一度に照会するだけです。

すべてのクエリで検索する必要がある「descript」varchar / textフィールドを含むテーブル。


7
  • 不適切なメンテナンス、つまり、インデックスの再編成、統計、ログのバックアップなし
  • インデックスがありません
  • 不十分なクエリ

7
  • 貧弱なデータベースとアプリケーションの設計
  • プラットフォームの利点の貧弱な使用法(開発者はプラットフォームに特化したデータベースアクセスコードが必要でした。SPも機能もありません)
  • もちろん、不適切なインデックス作成。

7
  • prodデータに対するアドホッククエリ-はい、開発者はそれが必要であると信じており、一部の人はアクセスできるかもしれません:-)
  • データベースを使用するアプリの設計が不適切-例:追加されたデータが多すぎて不要になっても削除されない(バックアップが大きくなり、メンテナンスタスクに時間がかかるため、パフォーマンスの問題につながる)
  • 同じドライブ上の同じraid以上のすべてのデータベースファイル(例:システムdbs、tempdb、ユーザーdbsを同じドライブ/ RAIDにまとめて)

3
  • 貧弱なデータベース設計
  • 貧弱なインデックス戦略(インデックスが多すぎる、インデックスが見つからない、インデックスのメンテナンスが不足しているなど)
  • 不十分なハードウェアアーキテクチャの決定

2

インデックス作成はパフォーマンスにとって重要ですが、ほとんどのDBAはそのことを知っているため、クエリの最適化によって最初に修正されるものの1つになる傾向があります。よく対処されていない領域:

  1. DBラウンドトリップが多すぎます。おしゃべりは、私が見る主なパフォーマンスの問題の1つです。
  2. 適切なトランザクション境界を取得します。すべてのINSERT / UPDATE / DELETEを処理すると、パフォーマンスが大幅に低下します。
  3. ハードウェア側の最適化の失敗。特に、DBログをDBデータとは異なるボリュームに配置します。

4番目の項目をリストに追加できれば、トリガーやカーソルの過度で不適切な使用になります。最近はあまり起きていないように見えますが、そうなった場合、パフォーマンスの観点から見ると痛みを伴います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.