Mysql
我們可以為特定表分配 mysql Key_buffer_size 值嗎?
在一些文件中,我發現我們可以將 key_buffer_size 分配給 myisam 表。這還包括以下步驟:
SET GLOBAL myisam_table.key_buffer_size = 4194304; CACHE INDEX test.myisam_table IN myisam_table; LOAD INDEX INTO CACHE test.myisam_table;
該命令執行良好。
但是我怎樣才能看到
key_buffer_size
不是全域的 MyISAM 表呢?是否有任何其他支持類似功能的 MySQL 引擎?
在您的問題中,您給出了設置專用密鑰記憶體的正確語法(請參閱LOAD INDEX INTO CACHE)
我之前寫過這個
一旦您將一個或多個表分配給專用密鑰記憶體並執行
LOAD INDEX INTO CACHE
:
記憶體的索引將
- 從預設密鑰記憶體中刪除
- 在重新啟動 mysqld 之前不要回到預設密鑰記憶體(安裝程序在 init 文件中重新載入)
您所能知道的就是哪些表不會進入預設鍵記憶體
如果要確保記憶體的內容不會過多,請執行以下操作:
STEP01) 執行這個查詢
SELECT CONCAT(ROUND(KBS/POWER(1024, IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999), SUBSTR(' KMG',IF(PowerOf1024<0,0, IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_key_buffer_size FROM (SELECT LEAST(POWER(2,32),KBS1) KBS FROM (SELECT SUM(index_length) KBS1 FROM information_schema.tables WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql')) AA ) A, (SELECT 2 PowerOf1024) B;
這將計算預設密鑰記憶體應該有多大(以 MB 為單位)以保存所有 MyISAM 索引頁面。
STEP02) 分配推薦號碼
假設來自 STEP01 的查詢是 5G。
- 如果您的機器只有 4GB 或 RAM,顯然不要分配它。使用推薦值的一半 (2G)。
- 如果您的機器有 10G,請繼續為密鑰記憶體分配 5G
所以在第一種情況下
[mysqld] key_buffer_size=2G
在第二種情況下
[mysqld] key_buffer_size=5G
STEP03)
service mysql restart
STEP04) 執行您的生產系統一周
STEP05) 執行這個查詢
SHOW GLOBAL STATUS LIKE 'Key_blocks_used'; SHOW GLOBAL STATUS LIKE 'key_cache_block_size';
無論這兩個數字返回什麼,相乘並除以 1048576。這將為您提供在 MyISAM 密鑰記憶體中使用了多少 MB 的空間。將該數字乘以 1.05 並將其四捨五入到最接近的整數。無論該數字是多少,這就是您用作 key_buffer_size 最終值的數字。
您必須在 6 個月內再次執行這 5 個步驟,以確保 MyISAM 數據索引的工作集具有最安全的值。它還可能顯示您是否需要在 DB 伺服器上擴展 RAM。