Mysql

我們可以為特定表分配 mysql Key_buffer_size 值嗎?

  • September 6, 2017

在一些文件中,我發現我們可以將 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

  • 記憶體的索引將

  • 您所能知道的就是哪些表不會進入預設鍵記憶體

如果要確保記憶體的內容不會過多,請執行以下操作:

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。

引用自:https://dba.stackexchange.com/questions/19015