熱 MySQL InnoDB 的方式...

之前寫過一篇「熱 MySQL 的方法...」,主要是利用 InnoDB 在 SELECT COUNT(*) 時會掃過一次 primary key 來熱:

pt-find --charset=utf8 --print -h $1 -u USER -p PASSWORD | xargs -t -P8 -I% -n1 sh -c "echo 'SELECT COUNT(*) FROM %;' | mysql -h $1 > /dev/null"

但想要熱整個表格時 (data 部份),這個方法就不夠力了,今天才想到可以這樣做:

SELECT COUNT(*) FROM (SELECT * FROM table_name) t;

這方法會把整個表格資料拉出來,但又不會造成大量的網路 i/o (以及洗畫面)。實際測過後發現效果還不錯... (對於 table scan 使用量很大的表格,靠這個把整個表個塞進 InnoDB buffer)

This entry was posted in Computer, Database, Murmuring, MySQL, Software and tagged , , , , , , . Bookmark the permalink.

5 Responses to 熱 MySQL InnoDB 的方式...

  1. Dennis Cheung says:

    MySQL 基本上還是主要用 OS Cache, 加少少 page cache

    如果大 table Hot cache , 在 linux 直接下 dd if=innodb of=/dev/null 應該更加 hot read cache; 而 select * from 其實還是有 random access 的

  2. InnoDB 早就是自己的 cache 了...

  3. 健瑋 黃 says:

    MongoDB 可能比較適合這樣的方式

  4. Pingback: MySQL 5.6 到 5.7 改變的預設值 | Gea-Suan Lin's BLOG

Leave a Reply

Your email address will not be published. Required fields are marked *