2013-08-22 110 views
2

我正在試圖虛擬化我的percona服務器5.5.32-31.0,並看到奇怪的東西。在虛擬化盒子上插入(真的是所有)查詢都很慢,但是這是配置文件的「查詢結束」步驟,會影響響應時間。「查詢結束」步驟MySQL簡單插入查詢慢

讓我退後一步,這是我的測試表:

CREATE TABLE `mysql_io_test` (
    `id` int(11) NOT NULL, 
    `time_diff` char(8) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `data` char(100) COLLATE utf8mb4_unicode_ci NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 

運行此:

set profiling = 1; 
insert into util.mysql_io_test select 999, '99:99:99', 'ABCDEFGHIJ'; 
set profiling = 0; 

我得到:

starting, 0.000031 
checking permissions, 0.000005 
Opening tables, 0.000530 
System lock, 0.000008 
init, 0.000008 
optimizing, 0.000002 
executing, 0.000095 
end, 0.000005 
query end, 0.067226 
closing tables, 0.000013 
freeing items, 0.000039 
logging slow query, 0.000002 
cleaning up, 0.000005 

在非虛擬化箱(帶較舊的數據庫:v5.5.27-28.1)我得到更合理的:

starting, 0.000039 
checking permissions, 0.000004 
Opening tables, 0.000013 
System lock, 0.000009 
init, 0.000008 
optimizing, 0.000002 
executing, 0.000038 
end, 0.000003 
query end, 0.000143 
closing tables, 0.000008 
freeing items, 0.000018 
logging slow query, 0.000001 
cleaning up, 0.000002 

我對每個步驟的真正意義都不是非常熟悉,但我真的不知道爲什麼「查詢結束」會很慢。手冊(http://dev.mysql.com/doc/refman/5.5/en/general-thread-states.html)沒有提供更多信息。我會盡量回到較早的版本,並在明天深入研究代碼,但我認爲以前有人可能會看到這一點,並可能爲我揭示這個謎。

一對夫婦的其他東西,可能是有用的:

  • 的虛擬機上盒這是我們所舊強大,都是中程
  • 還有其他6個虛擬機在運行框中運行現在
  • 此服務器一般比舊服務器慢
  • 新服務器上的幾個大負載測試已經糟糕透了,但最近的測試實際上比舊服務器更快。所以我不能說這個'查詢結束'問題一直在發生;儘管自上次大型測試後配置發生了變化。
+0

如果第二個的100分之6是顯著您對於用於提交到磁盤的寫入要求「慢」,則需要詳細的存儲配置(設置,操作系統的緩衝區,硬件)是在每一種情況下使用。而在此,這個問題可能屬於[dba.se]而不是SO。坦率地說,我很驚訝你關心這樣一個微小的差異:感覺像沒有意義的微觀優化。記住Knuth的格言「*過早優化是所有邪惡的根源*」。 – eggyal

+0

在舊的服務器上,我可以每秒插入大約1000行,而新的服務器只做大約15個,這看起來不太合適。我不認爲這是存儲配置問題,因爲直接使用fio進行硬盤測試會得出與虛擬機盒中相同的I/O。大多數情況下,這只是讓我感到不可思議的一步。如果它正在發送數據或類似的東西,它會更清楚它實際花費的時間。 –

回答

0

對於遇到此問題的其他人,我想我已經追蹤了一下這個問題。我從ALL_O_DIRECT改變了innodb_flush_method就經常框O_DIRECT在VM因爲MySQL是給這樣的警告:

kernel: EXT4-fs (vdb1): Unaligned AIO/DIO on inode 17565314 by mysqld; performance will be poor. 

回覆到ALL_O_DIRECT使得該警告再次開始顯示出來 - 但我的表現是100倍就更好了「查詢結束」的步驟,所以我現在要去用它。

我希望這可以幫助任何遇到同樣問題的人。