【注目記事】
・SEの転職体験談 | 受託開発から自社製品開発へ ・SIer勤務のSEがパソナキャリアに相談してみた ・SIer勤務のSEがマイナビエージェントに相談してみた
DBMSのバッファは、SQLのパフォーマンスに重要な影響を与えます。
この記事では、そのバッファに関して最低限知っておきたい知識をまとめました。
目次
記憶装置の分類
バッファはメモリの中に確保するものですが、なぜメモリにバッファが必要なのかを理解するために、まずはデータを保存する記憶装置には何ががあり、それぞれがどんな役割を担うのかを整理します。
全体像
(参考 『SQL実践入門』| ミック)
記憶装置の分類を簡単にまとめたのが上記の図です。
本当はテープなどのより低コストかつアクセつ速度が遅い三次記憶装置がありますが、バッファについて理解するためには一次、二次記憶装置を理解すれば十分です。
一次記憶装置は高速だけど費用が高い
一次記憶装置にあたるのはメモリなどです。
一次記憶装置は高速にアクセスできるので、処理速度が早いです。
しかし、費用が高いためPCにたくさん搭載することは難しいです。
また、一次記憶装置はデータを永続的に保存できないので、保存したい場合は二次以降の記憶装置が必要です。
二次記憶装置は低速だけど費用が安い
二次記憶装置はHDDやフラッシュメモリの事です。
一次記憶装置と比べて、二次記憶装置は低速な代わりに費用が安いという特徴があり、たくさんの容量をPCに積む事ができます。
また、永続的にデータを保存できるので、データを保管する場合は基本的※に二次記憶装置を使用します。
※バックアップなど、普段使用せず、かつ大きな容量が必要なものは三次記憶装置を利用する場合があります。
SQL用のメモリに確保するデータの保存先が「バッファ」
SQLで処理をする際に、呼び出したデータを一時的に保存し、それを後の処理で再度利用する事があります。
一次記憶装置のメモリに保存すれば高速にデータの保存・呼び出しができるので、より高速に処理を進める事ができます。
そして、SQLでデータを保存するために、メモリの中に確保する領域の事を「バッファ」と呼びます。
バッファの種類
バッファは用途に合わせて複数の種類があります。
データキャッシュ
HDDなどのディスクにあるデータの一部を保持するためのメモリ領域です。
SELECT文を利用した際に、全てのデータがデータキャッシュに保持されていれば、高速にレスポンスを返せます。
ログバッファ
ログバッファは、INSERT、DELETE、UPDATE、MERGEなどの更新処理で利用します。
DMBSは更新命令を受け取ると、すぐにディスクのデータを更新せず、このログバッファに更新情報を保存し、ある程度更新情報が溜まってからディスクの更新をします。
ディスクへの更新を後回しにする事で、更新待ちの時間ロスを回避し、処理を高速化できるので、わざわざログバッファに一度保存するという方法がとられています。
ワーキングメモリに注意する
バッファとは別に、ある用途でメモリ領域が確保されます。
それがワーキングメモリです。
ワーキングメモリは、ソートやハッシュなどの特定の処理に利用される作業用の領域です。
ワーキングメモリで注意が必要な点があります。それは、メモリ上のワーキングメモリが不足した場合、DMBSはディスクに作業用の領域を確保します(TEMP落ち)。
※SQL Serverでは、ディスク上の作業領域をTEMPDBと言います。
SQL Serverインスタンスが内部で利用する一時領域「TEMPDB」とは
そうなると、作業領域へのアクセス速度が落ち、結果的にSQLの処理速度が落ちます。
例えば、大量のレコード数のテーブルをソートしたり、複数のSQLを同時に実行すると、急にSQLが遅くなる事があります。
その場合、ワーキングメモリが不足している可能性があるので、確認するとよいでしょう。
トレードオフを意識する
バッファを利用するほど、パフォーマンスの向上が見込めます。
しかし、メモリは高価なため、無限に容量を増やせる訳ではありません。
データキャッシュ(SELECT用)、ログバッファ(更新用)、ワーキングメモリ(作業用)それぞれに、どれだけのメモリを割り当てるか設定できるので、それぞれどれだけ割り当てるかを慎重に検討する必要があります。
【参考書籍】
SQLスキルを高めるためのおススメ書籍
SQLのスキルを高めるには、学校の試験勉強と同じように多くの問題を解いてみるのが効率的です。
『スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)』は、SQLの基本的な内容の解説に加え、200問を超える問題が掲載されているので、SQL初心者が学習に使うのにおススメです。
実際、この書籍を新卒1年目の新人さんに2-3週間かけて取組んでもらったことがあり、書籍を読んだ後に簡単なSQLの改修を任せましたが、基本的な部分にはつまずかずに改修を進められました。
コメントを残す