読者です 読者をやめる 読者になる 読者になる

FOR SE

文系の学部から新卒でメーカー系のSIerに就職。技術・スキルがないためブログを通して勉強。その後、IT業界の業界知識が活かせる人材業界に就職

このエントリーをはてなブックマークに追加

【DBMS入門】DBMSが目指している姿

【今回の内容】

 
 DBMSが何を行っているかざっくり調べた内容をまとめます
 DBMSの目指す姿を軸に
 

【学習のきっかけ】

■簡易なSQLは書けるけどDBMSってなにしてるんだろうか

  SQLは非手続き言語。「データをどのように取ってくるか」などのHOWの部分を指示する必要がない。
 
 なにをとってくるかだけ指示すればDBMSがなんとかしてくれる。
 
 少しSQLになれてくると
 

 ・DBMSってなにをしてるんだろー
 ・なぜ処理結果は同じなのに指示の仕方によって実行速度が異なるのか
 
 などDBMSの中身の処理に疑問を持つようになった
 

【内容】

 

DBMSの目指す姿・思想・哲学

以下の3つを目指していることを考えると、いろんなことがうなづける、はず

  
  ①早いレスポンスの実現
  
  ②並列処理の実現しつつ、高スループット(複数人でDBを利用できる(検索・登録・削除・変更))
  
  ③COMMITされたデータは守る
  
  ※「Oracleの仕組み」より引用

 

■並列処理の実現しつつ、高スループット

   

   並列処理の実現しつつ、高スループットを実現するために
   
   ①クライアントからの更新処理依頼はまとめてディスクに書き込む

    メモリのアクセス速度に比べて実際のDBファイルがあるディスクへのアクセス速度は遅い
   よって、なるべくディスクへのアクセスを減らしている。
   ちなみに、まとまった更新処理を行うタイミングを「チェックポイント」と呼ぶ
   
   ②バッファキャッシュを使用するかつバッファキャッシュをプロセス間で共有にする

     あるデータがディスクのどこにあるかといったデータなどをキャッシュとして
    メモリとして保存しておく。それにより、再度同じデータへのアクセスがあった
    時に処理速度が早くなることが期待される
    それをプロセス間で共有する。
    
   
   
   ③SQLの解析情報(実行計画)をプロセス間で共有にする
    
実行計画とは、SQL文を解析してどのような順序で処理を実行すると
    最も効率的なのかを計画したもの。
    このSQLの解析から実行計画をたてる際、CPUのリソースの消費が大きい。
    よって、同じような問い合わせ(select文とか)であれば、以前の実行計画を
利用する。それにより、処理速度が速くなることが期待される。
ちなみにプロセス間で共用するSQLの解析情報は共有プールに存在する。

■COMMITされたデータは守る

   COMMITされたデータは守るために  

   ①トランザクションログファイルをディスクに残す

    ユーザが更新処理の終了をRDBMSから受け取っていても、ディスクにあるDBファイル
    が更新されているわけではない。更新処理を行われているのは、メモリにあるメモリバッファ。
    ※理由はレスポンスを早くするためにディスクへの書き込み頻度を減らすため。
    更新処理がメモリバッファのみであると、障害発生時、ディスクに書き込まれていない更新処理は
    ディスクに反映されず失われてしまう。
    そこで更新処理のログ(SQL)をディスクに保存しておく。
    このトランザクションログファイルをもとにCOMMITされていた内容を保障する

.hatena-module:nth-of-type(10) { background: transparent; } .hatena-module:nth-of-type(10) .hatena-module-title{ display: none; } .hatena-module:nth-of-type(10) .hatena-module-body { padding: 0; }