2011-05-24 49 views
7

有一個簡單的命令,讓我調整一個MySQL數據庫實例運行比正常慢去優化的MySQL

我工作的代碼,記錄和重放數據庫交互。它所做的一件事是跟蹤給定的查詢/命令執行的時間,並且在重播過程中如果運行速度明顯較慢,則會引發警告。當然,如果你不測試它,它是行不通的;我正在嘗試爲此功能提供自動測試。有什麼我可以做我的測試數據庫,會搞砸了性能?我需要做的就是可靠地爲任何給定的查詢添加2+毫秒,並且我已設置。

+0

就是你在MySQL寫,或者是一些其他語言和代碼只是觀察你DATABSE? – AllenG 2011-05-24 14:59:44

+0

這是使用MySQL數據庫的Perl代碼。 – BlairHippo 2011-05-24 15:04:14

回答

9

如果你只是想測試長的查詢,這樣做:SELECT SLEEP(1);

它不應該的問題是什麼查詢本身,如果你想要做的是測試如果你的持續時間的檢測工作。

(我知道這打破了真正的「重播」的方面,但它應該是微不足道的「回放」一些select語句中添加SLEEP(1)

編輯:

的第二個想法,你可能會更好:從另一個連接創建一個表上的鎖。運行腳本。稍等一會。刪除該鎖。它不會涉及任何回放查詢。

+0

夥計。我所要做的就是將播放文件虛設爲聲稱'SELECT SLEEP(1);'應該只需要一毫秒的時間來執行,這會給我每次都要查找的行爲。這似乎正是我需要的。一旦我的測試運行,一個閃亮的複選標記應該是你的。謝謝! – BlairHippo 2011-05-24 15:03:50

+0

...如果由於某種原因不起作用,免費鎖解決方案看起來幾乎可口。 – BlairHippo 2011-05-24 15:05:33

+0

@BlairHippo,它應該足夠好,然後。如果您想要一個不涉及此類欺騙的解決方案,請參閱我的編輯。 (編輯:看起來像你現在。) – Matthew 2011-05-24 15:06:36

1

基本步驟如下所示:

  1. 開始交易

  2. 做你的SQL的東西,在Perl或者SQL

  3. 睡眠2ms的

  4. 提交

關鍵是開始/提交部分:它會保護你的任何鎖定,因爲你希望他們做的事情一樣慢。

其他測試來考慮:

  1. 在兩個進程

  2. 開始交易做你的SQL的東西在第一過程

  3. 做你的SQL的東西,在第二過程

  4. 在每個過程中做更多的SQL東西

  5. 提交的每個進程