0
爲了避免對新表格進行「熱身」,舊指標是否存在?使用pt-online-schema-change工具時,可以保留原始表的索引嗎?
爲了避免對新表格進行「熱身」,舊指標是否存在?使用pt-online-schema-change工具時,可以保留原始表的索引嗎?
是的,所有索引都包含在新表的定義中。
這很容易測試:
mysql> create table test.sometable
(x int primary key, y int, z int, unique key (y), key (z,y));
然後嘗試更改表PT-在線模式的變化:
$ pt-online-schema-change D=test,t=sometable --alter "ENGINE=InnoDB" --execute
現在檢查表,以確保它仍然有索引它開始:
mysql> SHOW CREATE TABLE test.sometable\G
但是,你的問題提到「熱身」,這是一個常常是一個詞組d將頁面從緩衝池中的表中取出。當ALTER對頁面進行更改時,它們必須在通往磁盤的緩衝池中。所以在ALTER結束時,你在緩衝池中確實有很多頁面。
您可以用新的INFORMATION_SCHEMA表InnoDB的指標是存在在MySQL 5.5和5.6測試:
mysql> SELECT TABLE_NAME, SPACE, COUNT(*) AS num_pages
FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU
WHERE TABLE_NAME = '`mydatabase`.`mytable`'
GROUP BY TABLE_NAME, SPACE;
-- Result shows a lot of pages loaded
mysql> ALTER TABLE mydatabase.mytable ENGINE=INNODB; -- dummy table restucture
mysql> SELECT TABLE_NAME, SPACE, COUNT(*) AS num_pages
FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU
WHERE TABLE_NAME = '`mydatabase`.`mytable`'
GROUP BY TABLE_NAME, SPACE;
-- Result shows a lot of pages still loaded, but the space id has changed
但在情況下,當表比緩衝池的容量更大,你結束不能保證頁面的一個子集,並且該子集是否適合該表的預熱緩衝池。
當您使用pt-online-schema-change時會發生同樣的情況。表空間id發生了變化,但是在修改後緩衝池中有很多頁面。