以下にメモリで処理させることを工夫する
データ取得する時にはメモリはディスクの10の5乗〜10の6乗倍(10万倍〜100万倍)以上高速である
メモリを増やす
ディスクへのアクセスを少なくして、メモリアクセスを有効利用するために、メモリをDBファイルと同じぐらいのサイズが望ましい、メモリが足りない場合は、ディスクへの読み込みが頻繁に発生して、当然遅くなる
DBのファイルサイズを確認(mysqlの場合)
# 全DBのファイルサイズ
SELECT table_schema
, SUM(data_length+index_length) /1024 /1024 as MB
FROM information_schema.tables
GROUP BY table_schema
ORDER BY SUM(data_length+index_length) DESC
# カレントDBのテーブル毎のファイルサイズ
SELECT
table_name, engine, table_rows, avg_row_length AS '平均行容量',
floor((data_length+index_length)/1024/1024) AS '総容量MB',
floor((data_length)/1024/1024) AS 'データ容量MB',
floor((index_length)/1024/1024) AS 'インデックス容量MB'
FROM information_schema.tables
WHERE table_schema=database()
ORDER BY (data_length+index_length) DESC;
画面が遅い、タイムアウトになる場合は調査
以下は本番ではなく、stagginDBでやること
- アクセスログを有効にして、発行するSQLを全部見れるようにする
SHOW GLOBAL VARIABLES where Variable_name like '%general_log%';
SET GLOBAL general_log = 'ON';
SET profiling=1;
general_log_fileの値を見て、ファイル監視
$ tail -f /var/lib/mysql/#{hostname}.log