2016-01-04 43 views
2

我正在JMeter中使用JDBC採樣器。我創建了採樣器,查詢類型爲Prepared Select Statement。我正在使用MySQL 5.5。JMeter JDBC準備好的語句沒有綁定變量

我在查詢部分寫了一條Select語句。這些參數在「參數值」部分以及它們在「參數類型」部分中的相應類型中提及。參數從CSV文件中獲取。

我運行查詢並驗證來自View Result Tree偵聽器的結果。我正在得到預期的結果。當我以多線程/多重迭代模式運行我的測試時,從數據檢索的角度來看,結果令人滿意,但是,從Mysql日誌文件中,我發現,不是隻設置綁定變量並執行查詢,而是執行了整個查詢再次彷彿它是簡單的選擇語句。

它給了我一個印象,儘管我已經選擇了Prepared Select Statement作爲查詢類型,但它正在將查詢作爲簡單的select語句執行。

有沒有人遇到過這個問題?我可以通過什麼方式解決這個問題? Configuration for my DB samplers

DB Sampler Info

+0

可以顯示您的測試元件的配置? –

+0

@UBIKLOADPACK:在原始文章中添加了JDBC配置元素映像的鏈接。 – Abhiram

+0

謝謝,但我想JBDC請求 –

回答

0

從大家展示一下,對我來說JMeter是使用預處理語句如此結合正在發生。

MySQL中的日誌讓你認爲綁定沒有發生? 你確定只有JMeter正在打MySQL嗎?

你能在user.properties設置:

log_level.jmeter.protocol.jdbc = DEBUG

重新啓動並顯示jmeter.log

JMeter是做工精細,閱讀:

所以在JDBC連接配置屬性 「數據庫URL」 改爲包括:

useServerPrepStmts =真

+0

以下是我的一些發現。 1)MySQL允許客戶端以及服務器端準備好的語句。默認情況下,服務器端預處理語句未啓用。在這種情況下,如果我們在JMeter查詢類型中選擇Prepared Select Statement,它將模擬客戶端準備語句。我們仍然會得到預期的結果,但是,在數據庫方面,該語句將作爲簡單的SQL語句執行。這裏是日誌。 – Abhiram

+0

3查詢集character_set_results = NULL 3查詢SET自動提交= 1 3查詢集的sql_mode = 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES' 3查詢SET自動提交= 1 3查詢選擇A,B,C來自表名WHERE this_.STATUS <>」 ERROR「AND this_.ACCOUNTID = 1 AND this_.TIME_BLOCK BETWEEN'2015-10-20 15:10:02'AND'2015-11-03 11:39:00' 3 Query SET autocommit = 1 3 Query select a ,b,c FROM TableName this_ WHERE this_.STATUS <>「ERROR」AND this_.ACCOUNTID = 2 AND this_.TIME_BLOCK BETWEEN'2015-10-20 09:47:37'AND'2015-11-03 13:47: 37' 3退出 – Abhiram

+0

以上日誌中,我們沒有看到mysql日誌中記錄了任何準備語句。爲了使服務器端準備好語句,我們必須將「useServerPrepStmts = true」和連接字符串一起傳遞。一旦我們通過這個,我們會得到以下日誌。 34準備選擇a,b,c FROM TableName WHERE this_.STATUS <>? AND this_.ACCOUNTID =? AND this_.TIME_BLOCK BETWEEN?和? 160104 12點51分16秒34 查詢SET自動提交= 1 34查詢SET自動提交= 1 34查詢SET自動提交= 1 34查詢SET自動提交= 1 34查詢SET自動提交= 1個 這表明服務器端預處理語句是加工。 – Abhiram