2011-10-26 8 views
3

私はブロックがFSとDBMSの基本的な物理的要素であると理解します。リレーショナルデータベース管理システム(MySQLやOracleなど)はブロックデータを格納し、後でそれをメモリにロードしますか?それはファイルシステムを使用していますか?検索方法は?あるいは、ファイルシステムのようにI/Oを裸にしていますか?典型的なRDBMSの格納とロケートはどのようにブロックされますか?

答えはどこからでも検索されていますが、答えは見つかりませんでしたが、ブロックストレージは多くのことを知っておく必要があります。

ありがとうございました。

EDIT:明確にするために、私が知りたいことは、DBMSがストレージ内で実際にこのブロックを実装する方法です。それはファイルシステムクラスタを使用するか、またはFSを完全にバイパスしますか?

答えて

2

私はMySQLとOracleのストアデータは、しかし、私は、Microsoft SQL Serverは、SQL Serverでは、ストレージの基本単位を

をどのように動作するかの洞察のビットを与えることができる方法について何も知らないのサイズは8 KBですページです。すべてがページサイズのチャンクに格納されており、これらの8 KBチャンクではほぼすべてのメモリも整理され、割り当てられています。たとえば、次のすべてがページに格納されます。ページががメモリにロードする必要があり、それを使用しているときはいつでも、テーブル内

  • データ
  • インデックス
  • は実行が

を計画しますSQL Serverがそのページの作業を終了するまでロードされていますが、作業が完了すると破棄されるのではなく、SQL Serverはできるだけ多くのページをバッファに格納しようとします。そのため、李しかし、まだメモリに残っているページは、必要に応じて再利用することができます(破棄し、別のページにアクセスするときに使用します)。

SQL Serverは、可能であればディスクの読み書きを避けるために、バッファプール内で使用可能なページを追跡します。ページが再利用されるときには複雑な規則があります( "レイジー書き込み"頻繁に使用されるページをメモリに保持し、キャッシュミスを最小限に抑えるために、ディスクにページを変更する必要があります)。基本的に、SQL Serverは、OSのページフォールトをトリガーせずにできるだけ多くのメモリを使用しようと常に試みています。

ロードするページをほとんどどのように知っているかについては、ほとんどインデクスがダウンしています - インデックス(ページにも格納されています)は、SQL Serverがインデックスをトラバースして関連レコードを最小限の読取り数を持つ索引(照会に応じて)。インデックスには、実際のデータがどのページに含まれているかをSQL Serverに知らせるリンクが含まれています。

これは非常に単純化されていますが、少なくとも、どのように動作するかの概要を説明する必要があります。より多くのことを学ぶことに興味があれば、Wikipedia page on SQL Server、特に「データストレージ」セクションをお勧めします。私は非常に有益であることが判明したSQL Serverの内部については、多くの書籍があります。

関連する問題