2017-09-23 84 views
1

我有數百個大型表,我已經從我的MySQL DB(使用亞馬遜遷移服務)遷移到RDS MariaDB。所有的存儲引擎都從MyISAM到InnoDB。這對性能有着災難性的影響。更改默認存儲引擎Amazon RDS MariaDB

簡而言之,我期待將默認存儲引擎更改爲MyISAM,然後重新遷移所有表。我願意接受任何有關如何做到這一點的其他想法(例如在遷移工具中使用某種設置)。我不想創建一個腳本來改變它們,因爲這意味着每次我導入數據時都需要這樣做。

我試着改變ParameterGroup的default_storage_engine,但是當我進入我運行的實例的ParameterGroup時,默認存儲引擎顯示爲只讀。 AWS Console Screenshot

我試過創建一個新的參數組,以及發生同樣的情況。該值顯示爲「可修改:false」。

任何幫助非常感謝。我查看了其他答案,但我不認爲修改my.cnf與RDS相關。如果是這樣,請讓我知道。

回答

2

顯然RDS不允許您更改該參數。

您可以更改一次每個表在MyISAM,一:

ALTER TABLE MyTable ENGINE=MyISAM; 

你可以得到你需要改變你的表的列表:

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE='InnoDB'; 

對於未來的表,不要依賴默認引擎。使用在CREATE TABLE語句中顯式指定的引擎創建表。

但是我會提醒你的是:MyISAM正在被MySQL逐步淘汰。它不支持併發寫入,行級鎖定,事務或原子更改。 InnoDB的顯示遍地是性能優越,在MyISAM,除了在難以察覺的情況:

  • SELECT COUNT(*) FROM MyTable;因爲MyISAM數據保持這個統計內置到每個表。無可否認,這是InnoDB或任何MVCC體系結構的一大缺陷。
  • 表掃描。但是,無論如何你都不應該進行表掃描,你應該做索引查找。針對InnoDB的優化查詢通常比針對MyISAM的表掃描性能要好得多。

我會鼓勵你弄清楚你的查詢優化並堅持使用InnoDB。

+2

MyISAM也受到RDS文檔的強烈阻止,因爲它似乎與RDS快照備份和時間點恢復的基本機制不兼容 - 這些似乎至少部分基於InnoDB的能力當MySQL從磁盤快照創建的備份中恢復後首次喚醒時,會從類似崩潰的狀態中恢復。 MyISAM表格不能很好地處理這個問題。 (軼事觀察表明,RDS中的時間點和快照恢復似乎在啓動時經歷了崩潰恢復。) –

0

當突然切換到InnoDB時,常見的性能問題與「事務」有關。

可能是因爲autocommit = ON,每個查詢都變成了自己的事務。 (不要把它OFF,這將導致更嚴重的問題。)你需要了解的交易,至少足以語句一起塊像

BEGIN; 
multiple statements, usually more than one, but not a huge number 
COMMIT; 

結合這(在許多情況下)將恢復一堆失去的表現。

關於轉換的更多討論是here