10億レコードのテーブルからの単純な抽出を検討しています。
<tagmapテーブル>
id int
tag_id int
idが振られている記事(1000万レコード)に対して1記事あたり100個のタグ付けを行っている想定のテーブルです。
タグ数(tag_id)は100万程度です。
SELECT id FROM tagmap WHERE tag_id=xxxxx;
の検索結果が、
初回
10000 rows in set (1.85 sec)
2回目
10000 rows in set (0.00 sec)
という具合で、キャッシュを使っていると思われる2回目が劇的に改善します。
WHERE句を変えると、やはり初回は1~2sec、2回目は0.00~0.01secで返ってきます。
初回のパフォーマンスのこれ以上のチューニングが難しく(パーティションなどが使いづらい)、何とか事前計算などでユーザーには最初から2回目のパフォーマンスを提供したいのですが、再起動時などに全ての抽出クエリのキャッシュをメモリに載せて、それを維持しておくことは可能でしょうか。
手順や必要なメモリ量の見積もりがわかる方がいれば教示いただけますでしょうか。
抽出パターンは単純なtag_idとして100万通りです。
(AND検索などはプログラムで絞り込む、または1~2secかけて抽出で構いません)
tagmapテーブルはファイルを見たところ約1GBのディスク量です。
サーバーのメモリは128GBなどは用意できるので、再起動時などに全てメモリに載せられれば、と考えています。
回答3件
あなたの回答
tips
プレビュー