プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • データベース
  • 【データベース】メモリの種類(「データキャッシュ」と「ログバッファ」など)
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【データベース】メモリの種類(「データキャッシュ」と「ログバッファ」など)

11.06

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

ほとんどのDBが以下3つを持っています。

  • データキャッシュ
  • ログキャッシュ
  • ワーキングメモリ

共通の特徴

  • ユーザーが用途に応じてサイズを変更することができる。

データキャッシュ

SELECT系(検索系)に関係します。ディスクにあるデータを一時的にキャッシュする領域です。運よくこれからSELECTするデータがこのメモリに載っていたら高速なレスポンスが可能です。

Oracle11 PostgreSQL9.3 MySQL5.7
名称 データベースバッファキャッシュ 共有バッファ バッファプール
パラメータ DB_CACHE_SIZE shared_buffers innodb_buffer_pool_size
初期値 4MB * CPU数 * グラニュルサイズ 128MB 128MB
確認コマンド SELECT value FROM v$parameter WHERE name='db_cache_size'; show shared_buffers; SHOW VALIABLES LIKE 'innodb_buffer_pool_size'
備考 SGA内部に保持される。 - -

ログバッファ

更新系(INSERT、DELETE、UPDATE、MERGE)に関係します。DBMSは更新系のSQLを受け取った時は即座にディスクを書き換えているのではなく、一旦ここに蓄積した上でまとめて書き込んでいます。(なので、SQL文の実行と、ストレージへの更新タイミングにズレが発生する非同期処理になります。)

なぜわざわざこんな仕組みなの?

こんなことをしていては非同期になってしまいますし、データ整合性を担保取れなくなるような気がします。

理由としてはディスク書き込みよりメモリ書き込みの方が高速に終わるのでユーザーを待たせなくても良くなるためです。

Oracle11 PostgreSQL9.3 MySQL5.7
名称 REDOログバッファ トランザクションログバッファ ログバッファ
パラメータ LOG_BUFFER wal_buffers innodb_log_buffer_size
初期値 512KB または 128KB * CPUカウントのどちらか大きい方 64KB 8MB
確認コマンド SELECT value FROM v$parameter WHERE name='log_buffer'; show wal_buffers; SHOW VALIABLES LIKE 'innodb_log_buffer_size'
備考 SGA内部に保持される。 - InnoDBエンジン使用時のみ有効

なぜ「データキャッシュ」に比べて、「ログバッファ」のサイズは小さいか?

基本的にデータベースは検索をメインの処理として想定しているミドルウェアのためです。検索系と更新系では想定処理件数にだいぶ差があるので、可能な限り検索系のメモリの容量を増やした方が得策だと考えられているのです。

検索

数百万件や数千万件というオーダーになることも珍しくないです。

更新

1トランザクションあたり、1〜数万件程度です。

ただ例外もある。

ただ、想定しているシステムが例えばバッチ処理がメインだったとしたら更新処理がメインになるので「データキャッシュ」よりも「ログバッファ」のメモリ量を増やすようなチューニングをした方が良いことは言うまでもないです。

ワーキングメモリ

SQLでソートやハッシュが必要になった時に使用される領域です。この領域が不足した場合は多くのDBMSでディスクが使われることになります。(OSでいうところの「スワップ」)

Oracle11 PostgreSQL9.3 MySQL5.7
名称 PGA(Program Global Area) ワークバッファ ソートバッファ
パラメータ PGA_AGGREGATE_TARGET work_mem sort_buffer_size
初期値 10MB または SGAサイズの大きい方のどちらか 8MB 256KB

Javaアプリケーションみたいに「Out of Memory」という選択肢をとることはないです。DBMSの思想としてどんなに遅くても良いので処理を継続させるというものになっているためです。

スポンサーリンク
  • 2021 11.06
  • miyabisan2
  • コメントを書く
  • データベース
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 04.25

    【データベース設計】バックアップと復旧(リカバリ)方法、レプリケーション、スナップショットとの違いなど

  2. 2021 10.03

    【データベース】テーブル設計:アンチパターン「EAV」

  3. 2018 04.25

    【データベース設計】採番について

  4. 2018 04.30

    【SQL】内部処理の仕組み(Oracle)

  5. 2021 09.26

    【データベース】インデックスが効かないケース

  6. 2018 04.22

    【データベース設計】インデックス(索引)の基本

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【SQL】INとEXISTS、JOINの違い

【SQL】アンチパターン「UNIONを使った条件分岐」

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー