我正在試圖虛擬化我的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個虛擬機在運行框中運行現在
- 此服務器一般比舊服務器慢
- 新服務器上的幾個大負載測試已經糟糕透了,但最近的測試實際上比舊服務器更快。所以我不能說這個'查詢結束'問題一直在發生;儘管自上次大型測試後配置發生了變化。
如果第二個的100分之6是顯著您對於用於提交到磁盤的寫入要求「慢」,則需要詳細的存儲配置(設置,操作系統的緩衝區,硬件)是在每一種情況下使用。而在此,這個問題可能屬於[dba.se]而不是SO。坦率地說,我很驚訝你關心這樣一個微小的差異:感覺像沒有意義的微觀優化。記住Knuth的格言「*過早優化是所有邪惡的根源*」。 – eggyal
在舊的服務器上,我可以每秒插入大約1000行,而新的服務器只做大約15個,這看起來不太合適。我不認爲這是存儲配置問題,因爲直接使用fio進行硬盤測試會得出與虛擬機盒中相同的I/O。大多數情況下,這只是讓我感到不可思議的一步。如果它正在發送數據或類似的東西,它會更清楚它實際花費的時間。 –