2011-02-23 28 views
0

我需要通過創建對MySQL的包裝(客戶要求:P)來模擬SQL數據庫和表的副作用,因此我的應用程序需要創建/刪除表(也可能是數據庫)在運行期間。SQL:創建/刪除在飛行

這種創建/刪除操作的頻率不會很高。我不是數據庫專家,但我相信這樣的操作可能會導致長期的一些副作用。

是最好什麼也別繼續與這些創建/刪除的數據庫,什麼是可能出現的併發症我能碰上?

回答

1

這是隻有在兩種情況下

場景#1

對於InnoDB表,InnoDB緩衝池應設定爲最佳所有數據的PAG和索引頁組成InnoDB表之和的問題。

更糟可以是innodb_file_per_table是禁用(默認值)

這將產生一個名爲文件/ var/lib中/ MySQL的/ ibdata1中可增不降。不管你多少次下降和創建數據庫,這都是事實。

如果一個人忘記使/etc/my.cnf中進行必要的修改,這也可能使InnoDB緩衝池利用不足,直到填充數據備份。

對InnoDB所做的更改很簡單。

運行此查詢

SELECT CONCAT(KeyBuf, 'M')BufferPoolSetting FROM(SELECT CEILING(SumInnoDB/POWER(1024,2))KeyBuf FROM(SELECT SUM(數據_長度+ index_length)SumInnoDB FROM INFORMATION_SCHEMA.TABLES '引擎='InnoDB'和table_schema不在IN('information_schema','mysql'))A)AA;

此查詢的輸出應該被用作在你放下所有數據庫和創建新的之前的/etc/my.cnf的innodb_buffer_pool_size。

場景#2

對於MyISAM表,關鍵緩衝區應該設定爲最佳所有.MYI文件的總和。

如果一個人忘記使/etc/my.cnf中進行必要的修改,這也直到填充數據備份暴露的MyISAM索引緩存(索引緩衝),以利用不足。

對MyISAM所做的更改很簡單。

運行此查詢

SELECT CONCAT(KeyBuf, 'M')KeyBufferSetting FROM(SELECT CEILING(SumIndexes/POWER(1024,2))KeyBuf FROM(SELECT SUM(index_length)SumIndexes FROM INFORMATION_SCHEMA.TABLES WHERE發動機='MyISAM'和table_schema NOT IN('information_schema','mysql'))A)AA;

此查詢的輸出應該被用作在你放下所有數據庫和創建新的之前的/etc/my.cnf的key_buffer_size的。

+0

我不知道關於mysql的配置。 MyISAM是我的默認引擎。你能告訴我應該做什麼改變嗎? – Neo 2011-02-23 05:44:25

+0

@Neo我在回答中添加了對InnoDB和MyISAM的建議調整 – RolandoMySQLDBA 2011-02-23 16:17:11