行/インデックスのバージョン管理
同時実行制御についてOracleのユーザーがSQL Serverでよく質問することに、「なぜSELECT文に共有ロックをかけるの? 次に更新したい人は、それが解除になるまで待たされるじゃないか」というのがあります。このような悲観的同時実行制御を嫌う場合、ヒント文でNOLOCKを指定していたわけです。
SQL Server 2005では「行のバージョン管理」という新しい機能が搭載されました。これはスナップショット分離という新しいトランザクションの分離レベルを導入することで、コミットされた値をブロックされずに読み取れるようにした機能で、同時実行性が向上しました。
例えば非常に大規模なデータベースがあって、データのフラグメンテーションが起きたのでインデックスの再構築をしたいとなった場合、この機能を使えば同時実行性が向上し、使い勝手がよくなるのです。具体的には、旧インデックスと新インデックス、2つの異なるインデックスのバージョン・ストアを持つことができます。このため「CREATE INDEX」という命令を発行した時点で、旧インデックスをいったんセーブ(スナップショットを取得)して、その一方で新インデックスの領域を確保しておき、旧インデックスを使い終わった時点で新インデックスにスイッチするといったことも可能になっています。
ただここで大きな問題があります。行のバージョン管理に基づく分離レベルでは、すべての処理でtempdbを使用するので、従来よりもtempdbをきちんと考えて作らないと、動的拡張が引き起こされたりしてパフォーマンスの足を引っ張りかねません。非常に便利な機能なのですが、最初の設計を入念に行わないと逆効果になりかねないことに注意しましょう。
最初の回ということで、今後の連載の内容をすこし予告しておきたいと思います。本連載では、以下の2つを1年間かけてじっくりと解説していけたらと思っています。
さて、第1回は今後の予定のガイダンスという意味もあって、いささか駆け足で見てきました。第2回以降は、SQL OSやDMVなど、どんどん話題が深くなっていくので、じっくりとお話ししていきたいと思います。
SQL ServerはマルチCPUを前提に開発されています。CPUの負荷が高いから新しいCPUがいるのではなく、パラレルで動かすために複数のCPUが必要なのだということをまずきちんと理解してください。また、ソフトウェア技術者というのはとかくハードウェアについての知識が不足しがちで、しかも自分で「ソフトウェア屋だから仕方ない」と思ってしまいがちです。しかし、現在のCPUをはじめハードウェアの技術は飛躍的に進歩し、ソフトウェアのテクノロジもそのハードウェアの機能に大きく依存するようになってきています。NUMAなどはまさにその好例といえるでしょう。
むしろテクノロジを考えるうえでハードウェアとソフトウェアは不可分になっており、データベースのパフォーマンスも、両者の高度な組み合わせのうえに成立しています。この連載でも、SQL Server 2005のことはもちろん、ハードウェアの知識についても随時掘り下げて学んでいきたいと思います。「ハードウェアの話は関係ないよ」などといわずに、ぜひしっかりとマスターしてください。
最後に余談ですが、今回私はマイクロソフトのMVPをお引き受けすることになりました。どうもこういう肩書は苦手でいままで辞退してきたのですが、今回いろいろお世話になった方から熱心に勧めていただいたこともあり、謹んでお受けすることにしたのです。いままでもSQL Serverのパフォーマンス・チューニングに関しては誰にも負けない覚悟で取り組んできましたが、今回正式にMVPを拝命したのをきっかけに、SQL Server のエバンジェリストの自覚を持ってますます努力していきたいと思っています。
もちろんこの連載もそうした取り組みの一環として、精いっぱいの力を注いでいくつもりです。いよいよ次回からは本格的なSQL Server 2005の核心に向けて、一緒に取り組んでいきましょう。どうか皆さんの応援をお願いします。
また私が監修を務めたMicrosoft Pressの翻訳書籍
が2007年7月2日から発売されています。本連載の内容と関連する部分もありますので、参考書としてご活用ください。(次回へ続く)
熊澤 幸生(くまざわ・ゆきお)
株式会社CSK Winテクノロジ 執行役員 兼 技術推進担当。メインフレーム環境で20年近くデータベース関連のITプロジェクトを数多く経験。また1979年から1983年まで米国に駐在し、データ主導型システム設計を実プロジェクトで学ぶ。1994年、アスキーNT(現、CSK Winテクノロジ)設立に参加し、SQL Server Ver 4.2からSQL Server 2000までシステム構築、教育にかかわってきた。現在同社執行役員 Chief Technology Officer。また、SQL Serverユーザー会「PASSJ」の理事として活動中。
オフィスローグ/工藤 淳
Copyright © ITmedia, Inc. All Rights Reserved.