データベース・メモリ・バッファ
メモリバッファ
データベースにSQLリクエストを送信すると、DBMSはディスクにアクセスして対応するデータを取得します.ディスクにアクセスすると、データI/Oはディスクブロック単位です.ただし、ディスクI/Oはメモリ計算よりも長い時間(通常、ディスク計算速度が数千倍遅い)を要するため、メモリバッファを使用してディスクI/O結果を管理する方法でディスクI/Oの回数を最小限に抑えることができます.ディスク・アクセスとメモリ・バッファの管理の主体は次のとおりです.
ただし、メモリバッファ領域はディスク領域よりも小さく、限られているため、バッファ内のページを管理することが重要です.バッファ領域がいっぱいの場合は、エクスポートするページをバッファから選択する必要がありますが、ページを削除することはできません.unpin状態で、次のアルゴリズムを使用して削除するページを選択します.
LRU
「最近のレコード使用」(LRU)は、バッファから最も早く最後に使用したページをエクスポートするアルゴリズムです.直感的な観点から見ると、これは良いアルゴリズムのように見えますが、実際にはデータベースではあまりよくないかもしれません.SQLのjoin演算を実行するとき、よく考えてみると、最近アクセスしたレコードよりもアクセスのレコードが早いことがわかります.
# Python pseudo code
join_result = []
for record1 in table1:
for record2 in table2:
if record1.column1 == record2.column2:
join_result.append([*record1, *record2])
表
table1
および表table2
において、表table1
のcolumn1
および表table2
のcolumn2
に対してjoin演算が実行される場合、上述した重複する繰り返し文が実行される.このとき、table1
のrecord 6およびtable2
のrecord d 1にアクセスし、次に(青色実線)table1
のrecord 6およびtable2
のrecord 2(青色破線)にアクセスします.ここで、record 2は私たちが最後にアクセスした最も古い記録であり、recordnは最近アクセスした記録です.データベース・バッファは、通常、nが最近アクセスされたが、最も遅いアクセスが予想され、レコード2が最も早いアクセスであるが、アクセス速度が最も速いため、最近使用されたページを置き換えるポリシーを使用する.
Toss immediate
特定のブロック内のレコードをすべて処理した後、直ちにメモリバッファからブロックを削除するアルゴリズム.
MRU
LRUとは対照的に、最近使用されたアルゴリズムは、最近完了した演算のブロックをバッファから破棄するアルゴリズムである.
バッファからエクスポートするページを選択し、ディスク上のブロックと同じ内容のページを選択した場合は、そのページを削除します.異なる場合は、ページ内容がディスクブロックに反映されます.通常、各ページは、dirtyタグなどのページが変更されたかどうかを個別に管理します.
Reference
この問題について(データベース・メモリ・バッファ), 我々は、より多くの情報をここで見つけました https://velog.io/@gwak2837/데이터베이스-메모리-버퍼テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol