2013-08-19 43 views
1

我正在運行mysqltuner來調整我的數據庫,並且遇到了一個非常奇怪的事件。儘管整個數據庫都是MyISAM,InnoDB數據量仍然很大?

即使整個數據庫的MyISAM(所有表),它說以下內容:

[!!] InnoDB data size/buffer pool: 403.1M/128.0M 

數據庫的默認存儲引擎是InnoDB的(即使所有的表都是MyISAM數據),所以我想這可能是以某種方式導致問題,但是當我將默認存儲引擎值更改爲MyISAM時,我仍然在mysqltuner中看到與InnoDB相關的完全相同的警告。

那麼爲什麼會發生這種情況,我該如何解決?當我不使用InnoDB開始時,我寧願不浪費InnoDB緩衝池中的400M。

注意:我不想在這裏做的是討論MyISAM VS InnoDB這個古老的問題,我只需要弄清楚爲什麼InnoDB在吃我的資源,儘管我沒有使用它。

+0

'default-storage-engine'只適用於新表。如果創建新表時未指定引擎,則使用默認值。 –

+0

所有表都是MyISAM,因爲它們是從不同的服務器導入的,而不是在這個服務器上創建的。 – jovan

回答

1

消歧:「數據大小」不是「緩衝池」。

數據大小是磁盤上數據庫文件的大小。它可以通過innodb_data_file_path服務器選項進行配置。

緩衝池是用作InnoDB表數據和索引的緩衝區的內存(RAM)空間。其配置選項是innodb_buffer_pool_size


首先,確保沒有InnoDB表都在您的實例:

SELECT * FROM information_schema.tables WHERE engine='InnoDB'; 

那麼如果的確沒有InnoDB表,你可以rebuild the InnoDB tablespace從頭開始(只有這樣,才能減少表空間,這是一個令人討厭的MySQL缺失功能)。即使有InnoDB表,您仍然可以重建表空間來回收一些未使用的空間(有關更多信息,另請參閱this answer)。

請注意,您不能將innodb_buffer_pool_size設置爲小於5 MB。但是您可以使用skip-innodb選項完全禁用InnoDB(及其緩衝區)。

+0

實際上,我當時很愚蠢,而information_schema表是InnoDB。我只是檢查自己的桌子。現在,你認爲我應該做什麼mysqltuner說,並增加InnoDB緩衝池?性能是否重要? – jovan

+0

很難說清楚。用'SHOW ENGINE INNODB STATUS'檢查你的游泳池的使用情況(尋找「BUFFER POOL AND MEMORY」部分)。如果游泳池接近滿,那麼您可以從更大的游泳池中獲益。這是一個獨立的問題,這些設置總是在個案基礎上處理。 – RandomSeed

相關問題