BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース MVP Erland氏がSQL Serverのパフォーマンス概念について検討

MVP Erland氏がSQL Serverのパフォーマンス概念について検討

ブックマーク

原文(投稿日:2011/07/13)へのリンク

最近の記事「アプリケーションで遅く、SSMSで速い?」で、 SQL Server MVPの Erland Sommarskog氏が クエリ プランに影響する様々なこと、 Dynamic SQLのコンパイル、最終的にSQL Serverデータベースのパフォーマンスに影響する他の要因について研究している。彼の研究は、様々な概念、パラメータ スニッフィングようなシナリオ、クエリ プラン キャッシング、ブロッキング、保存された設定、リンクしたサーバーの課題などに及んでいる。

この記事から幾つか面白いものを引用する。

プロシージャが最初に実行される時のパラメーター値は、その後の実行に大きな影響を及ぼす。もしある理由でこの最初の値セットが特殊であった場合、キャッシュしたプランは、その後の実行にとって最適なものではないだろう。これがパラメータ スニッフィングが重要な理由である。

時々フォーラムやニュースグループで、ストアドプロシージャが遅いが、プロシージャの外で同じクエリを走らせると速い、と言っている人々を目にする。自分で問題解決をしようと考えたら、変数を定数で置き換える。しかし、これまで見てきたように、スタンドアローンクエリの結果は、非常に違う。SQL Serverは変数ではなく定数で、もっと正確な見積りをすることができる。なのでもっと正確なプランが手に入る。

(リンクしたサーバーにとって)重要なのはリモートサーバーに対するパーミッションであり、クエリが走っているローカルサーバーに対するものではない。また、リンクされたサーバーが他のSQL Serverインスタンスの時は、この問題ははっきりする。リンクされたサーバーがOracle、MySQLあるいはAccessの場合には、この問題は起きない。

この記事はまた、ボトルネックや潜在的問題ばかりでなく、関連しているSQLクエリを見つけ出す色々な方法について説明している。

  • Management Studio内からクエリプランやパラメーターを得る
  • それらをクエリキャッシュから直接得る
  • それらをTraceから得る
  • テーブルとインデックス定義を得る
  • 統計情報を見つけ出す

氏はまたパラメータ スニッフィングの問題を修正する様々な方法を挙げている、例えば、再コンパイルの強制、インデックス化のレビュー、OPTIMIZE FORの使用、最後に、色々なシナリオで適用できる、単に悪いSQLの修正などである。

最後に、この記事は動的なSQLやいかに似たような原理が動的SQLクエリのパフォーマンスに影響するかについて述べている。この記事は開発者やDB管理者のようなSQL Serverで開発している誰もが、絶対に読むべきである。

この記事に星をつける

おすすめ度
スタイル

BT