久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

JMeter壓測數(shù)據(jù)庫全指南:JDBC配置、參數(shù)化與并發(fā)實戰(zhàn)

JMeter壓測數(shù)據(jù)庫全指南:JDBC配置、參數(shù)化與并發(fā)實戰(zhàn) 1. 先想清楚壓數(shù)據(jù)庫和壓接口到底差在哪很多人用 JMeter 做接口測試、壓 Web 服務(wù)駕輕就熟。但一說到用 JMeter 直接壓數(shù)據(jù)庫不少人就懵了——數(shù)據(jù)庫也能用 JMeter 壓怎么連連上了能測啥先說結(jié)論不僅能壓而且非常好使。我在實際項目里既用 JMeter 壓過 MySQL、PostgreSQL也壓過 Oracle甚至給第三方數(shù)據(jù)中臺做過壓測靠的都是 JMeter 自帶的 JDBC 請求組件不需要裝任何額外插件。但有一個認(rèn)知必須先糾正用 JMeter 測數(shù)據(jù)庫不等于在數(shù)據(jù)庫客戶端里手動執(zhí)行幾條 SQL 看返回時間。它做的是“模擬真實業(yè)務(wù)場景下大量并發(fā)請求同時打向數(shù)據(jù)庫”這件事——比如 100 個用戶同時登錄每個登錄動作背后對應(yīng)著幾條 SQL這些 SQL 同時打到數(shù)據(jù)庫上數(shù)據(jù)庫扛不扛得住平均響應(yīng)時間多少有沒有慢查詢連接池會不會被打滿這才是壓數(shù)據(jù)庫的核心目的。所以這篇文章我不會只講“怎么連上數(shù)據(jù)庫”而是把 JMeter 測試數(shù)據(jù)庫的完整方法拆開揉碎環(huán)境準(zhǔn)備、JDBC 連接配置、JDBC Request 詳解、參數(shù)化傳值、斷言校驗、并發(fā)場景搭建、常見問題排查一條龍講清楚。你照著做基本可以覆蓋日常工作中 90% 的數(shù)據(jù)庫壓測需求。適合誰看剛接觸 JMeter、想用它做數(shù)據(jù)庫壓測的測試新人被領(lǐng)導(dǎo)臨時派活、需要在兩天內(nèi)給出數(shù)據(jù)庫性能結(jié)論的測試工程師以及那些已經(jīng)會基本接口壓測、但沒系統(tǒng)搞過 JDBC 請求的老手??赐昴阒辽倌塥毩⒋畛鲆惶讕?shù)化、帶斷言、帶并發(fā)模型的數(shù)據(jù)庫壓測腳本。2. 環(huán)境準(zhǔn)備驅(qū)動、版本、連接方式一步都不能錯2.1 先確認(rèn) JMeter 版本和 JDBC 驅(qū)動開始之前先確認(rèn)你的 JMeter 版本。我這邊用的是 JMeter 5.xJDBC 請求相關(guān)的組件從 3.x 就有界面和配置項基本一致所以你用 4.x 或 5.x 都行不用太糾結(jié)版本。關(guān)鍵在于JDBC 驅(qū)動 Jar 包。JMeter 本身不自帶數(shù)據(jù)庫驅(qū)動你必須手動把對應(yīng)數(shù)據(jù)庫的驅(qū)動 Jar 包放到 JMeter 的lib目錄下然后重啟 JMeter 才能生效。常見數(shù)據(jù)庫對應(yīng)的驅(qū)動 Jar 包MySQLmysql-connector-java-8.0.x.jar如果你連的是 MySQL 5.x建議用 5.1.4x 版本MySQL 8.x 一定要用 8.0 版本的驅(qū)動不然連接會報錯。PostgreSQLpostgresql-42.x.x.jarOracleojdbc8.jar或ojdbc11.jar看你數(shù)據(jù)庫版本SQL Servermssql-jdbc-9.x.x.jar驅(qū)動包放好之后重啟 JMeter然后用一個最簡單的 JDBC 請求驗證一下能不能連上。別一上來就搞復(fù)雜場景連接都不通的話后面全是白搭。2.2 JDBC 驅(qū)動類名和連接 URL別記混了很多新手死在第一步就是驅(qū)動類名和 URL 寫錯。這里直接給你一份對照表抄作業(yè)就行數(shù)據(jù)庫JDBC Driver ClassJDBC URL 格式MySQLcom.mysql.jdbc.Driver5.x/com.mysql.cj.jdbc.Driver8.xjdbc:mysql://127.0.0.1:3306/testdb?useSSLfalseallowPublicKeyRetrievaltrueserverTimezoneAsia/ShanghaiPostgreSQLorg.postgresql.Driverjdbc:postgresql://127.0.0.1:5432/testdbOracleoracle.jdbc.OracleDriverjdbc:oracle:thin:127.0.0.1:1521/ORCLSQL Servercom.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://127.0.0.1:1433;DatabaseNametestdb注意 MySQL 這里有兩個坑第一MySQL 5.x 和 8.x 的 Driver Class 不一樣。8.x 是com.mysql.cj.jdbc.Driver不是com.mysql.jdbc.Driver寫錯直接報ClassNotFoundException。第二MySQL 8.x 連接 URL 里建議加上useSSLfalseallowPublicKeyRetrievaltrueserverTimezoneAsia/Shanghai。不加 serverTimezone 會報時區(qū)錯誤不加 allowPublicKeyRetrieval 會在某些認(rèn)證方式下報Public Key Retrieval is not allowed。這兩個參數(shù)我每次都會帶上省得排查半天。經(jīng)驗我一般會在連接 URL 里額外加一個connectTimeout5000socketTimeout10000避免數(shù)據(jù)庫掛了之后線程一直卡在等待上壓測時能很快暴露連接超時問題。比如jdbc:mysql://127.0.0.1:3306/testdb?useSSLfalseallowPublicKeyRetrievaltrueserverTimezoneAsia/ShanghaiconnectTimeout5000socketTimeout100002.3 環(huán)境驗證用一個最簡單的查詢打通鏈路驅(qū)動放好、配置想清楚了先做個連通性測試——在 JMeter 里建一個測試計劃加一個 JDBC Connection Configuration再選一個庫建一個線程池跑一條SELECT 1如果返回正常鏈路就通了。這一步別看簡單它價值很大能一次性排除驅(qū)動、URL、賬號密碼、網(wǎng)絡(luò)四個環(huán)節(jié)的問題。如果SELECT 1都跑不通那后面再復(fù)雜的腳本也跑不通不如先在這里把問題解決掉。3. JDBC Connection Configuration連接池配置才是壓測的關(guān)鍵3.1 配置項逐行拆解JDBC Connection Configuration 是 JDBC 請求的前置條件相當(dāng)于給所有 JDBC 請求提供數(shù)據(jù)庫連接池。它不是一個“填個 URL 就行”的簡單配置每個選項背后都有講究。關(guān)鍵的幾個配置項Variable Name for created pool連接池變量名隨便起比如db_pool但你要記死它因為 JDBC Request 里要通過這個名字來引用這個連接池。一個測試計劃里可以配置多個連接池給不同庫用靠名字區(qū)分。Max Number of Connections最大連接數(shù)。這個值很關(guān)鍵它決定了 JMeter 能同時從池里拿多少個連接。如果你壓 100 個并發(fā)但最大連接數(shù)只有 10那 JMeter 的請求就會排隊等連接測出來的結(jié)果不是數(shù)據(jù)庫的真實瓶頸而是連接池的瓶頸。Max Wait最大等待時間單位毫秒。連接池沒空閑連接時請求最多等多久超時拋異常。一般設(shè) 10000。Time Between Eviction Runs清理線程運行間隔。JMeter 會定期清理空閑過久的連接一般設(shè) 60000。Auto Commit自動提交。只做查詢壓測時設(shè) True 就好涉及事務(wù)、插入、更新時按需改成 False。Transaction Isolation事務(wù)隔離級別默認(rèn) DEFAULT 即可不用特別改。Pool Validation Query連接有效性檢查 SQL。MySQL 下寫SELECT 1PostgreSQL 下寫SELECT 1Oracle 下寫SELECT 1 FROM DUAL。JMeter 每次從池里拿連接時可以用這個 SQL 驗證連接是否還活著避免拿到失效連接。3.2 連接池參數(shù)怎么定一個簡單的估算方法連接池最大連接數(shù)怎么定很多教程會說“設(shè)大一點就行”但實際不是這么回事。連接數(shù)設(shè)太大數(shù)據(jù)庫可能會因為并發(fā)連接過多直接拒絕服務(wù)設(shè)太小JMeter 這邊又會排隊。我的做法是連接池最大連接數(shù) 目標(biāo)并發(fā)線程數(shù)。比如你要模擬 100 個用戶并發(fā)那么 Max Number of Connections 就設(shè) 100 或略大于 100比如 100。這樣每個線程拿到一個獨立連接不會出現(xiàn)兩個線程搶一個連接的情況。這里有個容易混淆的細節(jié)JMeter 的線程數(shù)和連接池連接數(shù)不是一一綁定的關(guān)系。線程可以復(fù)用連接但如果你想測的是“數(shù)據(jù)庫在 100 個并發(fā)連接下的表現(xiàn)”那連接數(shù)就必須給夠否則測出來的曲線是連接池排隊曲線不是數(shù)據(jù)庫性能曲線。3.3 為什么要用連接池而不是每個線程單獨連JMeter 里還有一種做法是每個線程自己創(chuàng)建數(shù)據(jù)庫連接不用連接池——比如用 BeanShell 或者 JSR223 寫代碼去DriverManager.getConnection()。我不推薦這種方式做壓測原因有兩個第一性能差。每次請求都重新創(chuàng)建連接開銷全花在 TCP 握手和認(rèn)證上測出來的響應(yīng)時間虛高。第二資源不可控。并發(fā) 100 個線程同時創(chuàng)建 100 個連接壓測機本身的文件描述符、內(nèi)存壓力都會變大干擾結(jié)果。所以標(biāo)準(zhǔn)做法就是一個 JDBC Connection Configuration 管連接池N 個 JDBC Request 從池里取連接執(zhí)行 SQL。連接池的創(chuàng)建、復(fù)用、回收J(rèn)Meter 都在底層幫你處理好了你要做的就是配置好那幾項參數(shù)。4. JDBC Request 詳解增刪改查都能壓4.1 SQL 查詢和變量名規(guī)則JDBC Request 是真正執(zhí)行 SQL 的地方。它長得很像一個 HTTP 請求 Sample但參數(shù)完全不同。核心參數(shù)有三個Variable Name of Pool declared in JDBC Connection Configuration填連接池變量名也就是你在 JDBC Connection Configuration 里填的那個名字。如果這里填錯JMeter 會直接報錯找不到連接池。Query TypeSQL 類型有 Select Statement、Update Statement、Callable Statement、Prepared Select Statement、Prepared Update Statement 等。如果是普通查詢用 Select Statement如果 SQL 里有占位符?必須用 Prepared Select Statement 或 Prepared Update Statement。QuerySQL 語句本體。這里有個新手高頻疑問Query Type 選 Select Statement 和 Prepared Select Statement 有什么區(qū)別區(qū)別在占位符。如果你要執(zhí)行SELECT * FROM user WHERE id ?就必須用 Prepared Select Statement然后通過參數(shù)列表傳入?的值。如果你執(zhí)行的是完整 SQL沒有?用 Select Statement 就行。相同點是結(jié)果都存放在變量里供后續(xù)使用。4.2 查詢結(jié)果的三種用法JDBC Request 執(zhí)行完之后結(jié)果存在哪答案是JMeter 會把結(jié)果集存到變量里變量名規(guī)則是你在 JDBC Request 里填的Variable Name。比如你在 JDBC Request 的 Variable Name 填了mysql_result那么執(zhí)行完查詢后mysql_result整個結(jié)果集mysql_result_#結(jié)果集行數(shù)比如返回 10 行這個變量值就是 10mysql_result_1第一行數(shù)據(jù)mysql_result_1_id第一行的 id 字段值mysql_result_2_id第二行的 id 字段值用Variable Name 下劃線 行號 下劃線 列名這個規(guī)則就能取到任意一行任意一列的值。這個特性相當(dāng)有用。最常見的場景是你從表 A 查到一批訂單 ID然后要把這些 ID 作為參數(shù)傳給下一個 JDBC Request 或 HTTP 請求。具體做法就是先執(zhí)行一條查詢 SQL然后在下一個請求里用${mysql_result_1_id}來引用第一行 ID。4.3 實際案例查詢用戶表數(shù)據(jù)我來演示一個最簡單的例子。假設(shè)數(shù)據(jù)庫里有一張user表字段有id、username、age我想壓測一條查詢 SQLSELECT id, username, age FROM user WHERE age 20配置如下JDBC Request Variable Nameuser_resultQuery TypeSelect StatementQuerySELECT id, username, age FROM user WHERE age 20跑完之后在察看結(jié)果樹里可以看到這個 JDBC Request 的響應(yīng)數(shù)據(jù)里面是查到的所有行。如果你想把這批數(shù)據(jù)取出來給后續(xù)請求用比如遍歷前 10 個用戶 ID就可以用${user_result_1_id}、${user_result_2_id}這種形式去引用。注意結(jié)果集會按位置存儲mysql_result_1是第 1 行mysql_result_2是第 2 行以此類推。如果你查詢結(jié)果本身有排序需求在 SQL 里把ORDER BY寫好否則取出來的行順序可能不穩(wěn)定。4.4 執(zhí)行更新操作怎么配置壓測不光是查詢有時也要模擬寫入、更新的業(yè)務(wù)壓力。比如 100 個用戶同時更新自己的資料。如果是帶參數(shù)的更新比如UPDATE user SET age ? WHERE id ?那么 Query Type 要選Prepared Update StatementSQL 里的?是占位符需要通過“Parameter values”和“Parameter types”傳入實際值。這里有個重要細節(jié)執(zhí)行 Update/Insert/Delete 操作時如果數(shù)據(jù)庫沒有返回結(jié)果集JMeter 會返回受影響的行數(shù)。比如某個 UPDATE 影響了 3 行JMeter 的響應(yīng)數(shù)據(jù)里會顯示3。如果你想驗證更新是否成功一種做法是更新后再執(zhí)行一條 SELECT 去查這條數(shù)據(jù)配合斷言來校驗。5. 參數(shù)化取值讓壓測數(shù)據(jù)動起來5.1 CSVDataset 參數(shù)化每個線程分塊取值做數(shù)據(jù)庫壓測時你常常需要模擬“不同的用戶操作不同的數(shù)據(jù)”而不是 100 個用戶都查同一條記錄。前者才是真實業(yè)務(wù)場景也能更有效地壓出數(shù)據(jù)庫的查詢能力。JMeter 里最常用的參數(shù)化方式就是CSV 數(shù)據(jù)集配置CSV Data Set Config。它允許你從一個 CSV 文件里按行讀取數(shù)據(jù)然后把每一列的值賦給變量。配置的時候有幾點要注意FilenameCSV 文件路徑Variable Names列名用英文逗號分隔比如id,username,ageDelimiter分隔符默認(rèn)是英文逗號Recycle on EOF讀完最后一行后是否回到開頭繼續(xù)讀。如果你壓測時長較長或者并發(fā)數(shù)大于 CSV 行數(shù)建議設(shè) True否則讀到末尾線程會直接結(jié)束或報錯。Stop thread on EOF讀完最后一行是否停止線程。如果 Recycle on EOF 是 True這個就設(shè) False。Sharing mode共享模式。默認(rèn) All threads 是所有線程共享一個文件指針按順序往下讀如果你想每個線程各讀各的可以選 Current thread。我在實際項目里壓“100 并發(fā)用戶登錄”時會準(zhǔn)備一個 100 行的 CSV每行一個用戶 ID 和密碼然后把線程組并發(fā)數(shù)設(shè)為 100CSV 共享模式用默認(rèn)的 All threads這樣每個線程拿到一個不同的用戶數(shù)據(jù)誰也不會搶。5.2 從上一個查詢結(jié)果取參JDBC 請求結(jié)果復(fù)用CSV 適合數(shù)據(jù)預(yù)先準(zhǔn)備好的場景但有些場景數(shù)據(jù)是動態(tài)生成的——你先要查一下有哪些訂單然后針對每個訂單做后續(xù)操作。這種時候就要用 JDBC Request 的查詢結(jié)果來做參數(shù)化。思路是先跑一條 SELECT把結(jié)果存到一個變量里然后在后一個請求里用${var_行號_列名}去引用。舉個例子第一步JDBC Request 查訂單 IDSELECT order_id, amount FROM orders WHERE status pending這個 JDBC Request 的 Variable Name 設(shè)為order_result。第二步在 HTTP 請求或下一個 JDBC Request 里引用訂單 ID${order_result_1_order_id} 訂單金額${order_result_1_amount}這樣就實現(xiàn)了“把數(shù)據(jù)庫查出來的數(shù)據(jù)作為下一個接口的參數(shù)”這個高頻需求。但如果查詢返回了多行而你希望循環(huán)處理每一行數(shù)據(jù)那還是建議配合ForEach 控制器來做。ForEach 控制器可以遍歷一個變量集合比如order_result下的所有行然后逐一執(zhí)行后續(xù)請求。配置時輸入變量前綴order_result循環(huán)變量名隨便取一個比如current_order然后在后續(xù)請求里用${current_order_order_id}就能依次取到每一行的數(shù)據(jù)。5.3 JDBC 請求結(jié)果里的特殊變量行數(shù)和 NULL使用查詢結(jié)果時有兩個場景很容易踩坑。第一空結(jié)果集。如果 SQL 查不到數(shù)據(jù)order_result_#會是 0此時不能引用order_result_1_order_id否則 JMeter 會輸出一個空值。為了不報錯可以搭配If 控制器判斷order_result_#是否大于 0再執(zhí)行后續(xù)邏輯。第二字段值本身是 NULL。比如某個字段在某些行里是 NULL引用之后得到的字符串是null而不是空字符串。如果你的下游接口對參數(shù)格式有嚴(yán)格要求需要在 BeanShell 或 JSR223 里做一個 null 值替換處理否則接口調(diào)用可能會因為多傳了null字符串而報錯。5.4 直接用 JSR223 腳本搞定更復(fù)雜的數(shù)據(jù)加工如果上面的方式都滿足不了需求比如你要對查出來的數(shù)據(jù)進行 MD5 加密后作為參數(shù)傳給接口那就得上 JSR223 腳本了。JSR223 Sampler 里可以用 Groovy 直接查數(shù)據(jù)庫處理結(jié)果集生成任意格式的字符串。Groovy 的語法比 BeanShell 簡潔太多性能也更好是 JMeter 官方推薦的方式。雖然這篇文章主要講 JDBC Request 這種圖形化配置但在自定義邏輯非常復(fù)雜的時候JSR223 是終極兜底方案。簡單示例import java.sql.* // 獲取連接池里的連接 def conn vars.get(db_pool) // 這只是示意 // 真實的連接獲取可以通過 DataSource 或者直接用 JDBC 驅(qū)動獲取這里省略不過說實話只有你需要寫復(fù)雜邏輯時才用 JSR223一般情況下 JDBC Request CSV 已經(jīng)能覆蓋絕大多數(shù)場景。過度使用 JSR223 反而會讓腳本難以維護。6. 斷言校驗怎么證明數(shù)據(jù)庫返回是對的6.1 響應(yīng)斷言最快最直接的校驗方式壓數(shù)據(jù)庫不是把 SQL 跑完就完事了你得確認(rèn)返回內(nèi)容是符合預(yù)期的。比如你查詢age 20的用戶結(jié)果返回里至少有數(shù)據(jù)行而不是空結(jié)果集或者一堆錯誤信息。JMeter 的響應(yīng)斷言可以加到 JDBC Request 上用來校驗響應(yīng)內(nèi)容。配置方式很簡單在 JDBC Request 上右鍵 → Add → Assertions → Response AssertionField to Test選 Text ResponsePattern Matching Rules選 ContainsPatterns to Test填你要校驗的關(guān)鍵字比如查詢user表你想確認(rèn)結(jié)果里有username這個字段名就可以在響應(yīng)斷言里填username。如果響應(yīng)里沒有這個關(guān)鍵字?jǐn)嘌跃蜁≡诰酆蠄蟾胬飼吹藉e誤率上升。這里有個技巧有時候 SQL 查出來的數(shù)據(jù)量很大響應(yīng)內(nèi)容很長你沒法直觀地看到是否有數(shù)據(jù)這時可以直接用響應(yīng)斷言校驗 “返回行數(shù)不為 0”。具體做法是把 SQL 改成SELECT COUNT(*) AS cnt FROM user WHERE age 20然后斷言響應(yīng)里包含cnt10或某個具體數(shù)字。注意JMeter 響應(yīng)里 COUNT 查詢的顯示格式是類似cnt10這樣的配合 Contains 斷言就能判斷數(shù)據(jù)量是否符合預(yù)期。6.2 BeanShell 斷言處理復(fù)雜校驗邏輯響應(yīng)斷言只能做簡單匹配如果你要做復(fù)雜判斷比如“查詢結(jié)果里最大金額大于 1000”或“返回行數(shù)在某個區(qū)間內(nèi)”就得用 BeanShell 斷言或者 JSR223 斷言。JSR223 斷言可以用 Groovy 寫邏輯清晰多了。比如判斷結(jié)果集行數(shù)def rowCount vars.get(user_result_#).toInteger() if (rowCount 10) { // 失敗手動設(shè)置斷言結(jié)果 AssertionResult.setFailure(true) AssertionResult.setFailureMessage(查詢結(jié)果集行數(shù)小于10實際為: rowCount) }這段腳本的邏輯是從 JMeter 變量里取user_result_#的值轉(zhuǎn)成整數(shù)判斷是否小于 10如果小于就手動標(biāo)記斷言失敗并輸出失敗原因。這樣在聚合報告或察看結(jié)果樹里你能很直觀地看到哪些請求沒通過校驗。經(jīng)驗斷言別加太多加的每一個斷言都會消耗額外的性能。壓測腳本里的斷言越精簡越好能用一個響應(yīng)斷言解決的就不要加腳本斷言。高并發(fā)壓測時過重的斷言會拉高 JMeter 本身的 CPU 開銷影響測試數(shù)據(jù)準(zhǔn)確性。6.3 結(jié)合“用結(jié)果樹看數(shù)據(jù)”排查問題壓測跑完后第一件事永遠是看察看結(jié)果樹View Results Tree。在結(jié)果樹里每個 JDBC Request 都能展開看它的請求數(shù)據(jù)、響應(yīng)數(shù)據(jù)、斷言結(jié)果。響應(yīng)數(shù)據(jù)里會顯示 SQL 執(zhí)行后返回的內(nèi)容格式。我遇到過很多測試小白寫完了腳本直接開壓壓完發(fā)現(xiàn)錯誤率 100%然后開始懷疑數(shù)據(jù)庫出問題了。其實根本不是數(shù)據(jù)庫的問題而是 SQL 寫錯了或者參數(shù)沒傳進去。這種時候不用慌打開察看結(jié)果樹找一個失敗的請求看它的響應(yīng)數(shù)據(jù)里的報錯信息十有八九一次就能定位到問題。7. 并發(fā)壓測實戰(zhàn)模擬 100 個用戶同時查庫7.1 線程組參數(shù)設(shè)計前面把 JDBC Request 和參數(shù)化都講完了接下來進入實戰(zhàn)模式——模擬 100 個用戶同時訪問數(shù)據(jù)庫看數(shù)據(jù)庫的表現(xiàn)。線程組配置建議Number of Threads (users)100Ramp-Up Period (seconds)10Loop Count50 或者填 ∞根據(jù)你的壓測時長來定這里解釋一下 Ramp-Up Period 的作用它表示 100 個線程在 10 秒內(nèi)全部啟動完畢也就是說每秒啟動 10 個線程。這樣做是為了模擬用戶逐步進入系統(tǒng)的真實場景而不是 100 個請求在同一毫秒內(nèi)全部打到數(shù)據(jù)庫。如果你希望一開始就是滿負(fù)載可以把 Ramp-Up 設(shè)成 1 秒如果你要做階梯壓測可以用 Stepping Thread Group 插件但這個插件需要額外安裝基礎(chǔ)場景下普通線程組就夠用了。Loop Count 表示每個線程執(zhí)行多少次查詢。假如一個 JDBC Request 執(zhí)行一條 SQL100 個線程 × 循環(huán) 50 次 總共 5000 次 SQL 查詢。這個總數(shù)可以用來估算壓測時長和數(shù)據(jù)庫負(fù)載。7.2 實戰(zhàn)腳本結(jié)構(gòu)一個標(biāo)準(zhǔn)的數(shù)據(jù)庫壓測腳本結(jié)構(gòu)如下測試計劃線程組100 線程10 秒內(nèi)啟動JDBC Connection Configuration連接池配置最大連接數(shù) 100CSV Data Set Config用戶數(shù)據(jù)參數(shù)化JDBC Request執(zhí)行 SQL響應(yīng)斷言校驗返回結(jié)果監(jiān)聽器聚合報告Aggregate Report察看結(jié)果樹View Results Tree需要注意JDBC Connection Configuration 和 CSV Data Set Config 都是配置元件Config Element它們的作用范圍是“所在層級之下的所有請求”。放在線程組下就對該線程組里的所有 JDBC Request 生效。7.3 壓測過程中的實時監(jiān)控壓測跑起來之后除了看 JMeter 的聚合報告我強烈建議你同時監(jiān)控數(shù)據(jù)庫端的指標(biāo)。光看 JMeter 的響應(yīng)時間是不夠的你還需要知道數(shù)據(jù)庫的 CPU、內(nèi)存、連接數(shù)、慢查詢數(shù)等指標(biāo)才能完整評估數(shù)據(jù)庫性能。具體做法如果是 MySQL可以在壓測時執(zhí)行SHOW PROCESSLIST;查看當(dāng)前所有連接和正在執(zhí)行的 SQL。查看數(shù)據(jù)庫的 CPU 和內(nèi)存占用比如用top或數(shù)據(jù)庫自帶的性能監(jiān)控工具。開啟慢查詢?nèi)罩緣簻y完后分析哪些 SQL 的執(zhí)行時間超過了閾值。這一步非常重要因為 JMeter 的聚合報告只能告訴你“響應(yīng)時間變慢了”但到底慢在數(shù)據(jù)庫的哪個環(huán)節(jié)——是 CPU 打滿了、還是鎖等待、還是磁盤 IO——必須結(jié)合數(shù)據(jù)庫端的指標(biāo)來看。7.4 聚合報告怎么解讀壓測結(jié)束看聚合報告的幾個核心指標(biāo)Samples總請求數(shù)Average平均響應(yīng)時間單位毫秒Min / Max最小/最大響應(yīng)時間Std. Dev.響應(yīng)時間標(biāo)準(zhǔn)差越大說明響應(yīng)時間波動越明顯性能越不穩(wěn)定Error %錯誤率正常壓測場景下應(yīng)為 0%有少量錯誤要具體分析Throughput吞吐量單位通常是req/sec意思是每秒能處理多少請求舉個例子100 個線程、循環(huán) 50 次的腳本跑完Samples 是 5000Throughput 如果是 200/sec說明數(shù)據(jù)庫每秒能扛住 200 次這個 SQL 查詢。如果你把循環(huán)次數(shù)加大Throughput 會逐步逼近數(shù)據(jù)庫的極限值這個極限值就是數(shù)據(jù)庫的處理能力上限。經(jīng)驗壓測數(shù)據(jù)庫時平均響應(yīng)時間和吞吐量要一起看。如果平均響應(yīng)時間很低但吞吐量也低說明 JMeter 本身或網(wǎng)絡(luò)成了瓶頸不是數(shù)據(jù)庫不行如果吞吐量上去了但平均響應(yīng)時間也跟著飆升這才說明數(shù)據(jù)庫開始進入高負(fù)載狀態(tài)。8. 常見問題與排查技巧實錄8.1 連接不通ClassNotFoundException 和 URL 報錯問題現(xiàn)象JDBC Request 報ClassNotFoundException: com.mysql.jdbc.Driver或Cannot create PoolableConnectionFactory。排查思路先看驅(qū)動 Jar 包有沒有放到 JMeter 的 lib 目錄下然后看是否重啟了 JMeter。如果確定 Jar 包在再看 Driver Class 寫對沒有——MySQL 8.x 驅(qū)動對應(yīng)的是com.mysql.cj.jdbc.Driver不是com.mysql.jdbc.Driver。如果報錯信息是Unknown database xxx檢查連接 URL 里的數(shù)據(jù)庫名是否正確。如果是Access denied for user檢查賬號密碼和數(shù)據(jù)庫權(quán)限。8.2 連接池不夠用Too many connections問題現(xiàn)象壓測過程中JMeter 報Too many connections或者數(shù)據(jù)庫端出現(xiàn)Connection refused。原因分析這個報錯有兩個方向一個是 JMeter 連接池最大連接數(shù)設(shè)得太大打爆了數(shù)據(jù)庫的最大連接數(shù)另一個是數(shù)據(jù)庫自身max_connections配置太小。解決方案先查看數(shù)據(jù)庫的max_connections比如 MySQL 可以用SHOW VARIABLES LIKE max_connections;查看。然后調(diào)整 JMeter 連接池的最大連接數(shù)讓它的上限略低于數(shù)據(jù)庫的max_connections留一些余量給其他應(yīng)用連接。順便說一句做壓測之前一定要和 DBA 或運維確認(rèn)好數(shù)據(jù)庫的連接上限否則壓到一半數(shù)據(jù)庫直接把連接全踢掉測試結(jié)果就廢了。8.3 響應(yīng)時間異常長慢 SQL 還是連接池排隊問題現(xiàn)象聚合報告顯示平均響應(yīng)時間高達幾秒遠大于你手動執(zhí)行 SQL 的時間。原因分析首先要區(qū)分是數(shù)據(jù)庫真慢還是連接池在排隊。手動執(zhí)行 SQL 快說明 SQL 本身沒問題。這時候要去看 JMeter 連接池的最大連接數(shù)是不是小于線程數(shù)——如果 100 個線程去搶 20 個連接剩下 80 個線程全在等連接響應(yīng)時間自然飆升。解決方案把 Max Number of Connections 調(diào)大使其等于或大于線程數(shù)再跑一次對比。如果響應(yīng)時間正常了說明之前的瓶頸是連接池如果響應(yīng)時間依然很大那就要去數(shù)據(jù)庫端看慢查詢?nèi)罩径ㄎ皇遣皇撬饕А㈡i等待等問題。還有一個細節(jié)如果連接 URL 設(shè)置了socketTimeout當(dāng)數(shù)據(jù)庫處理查詢超過這個值時JMeter 會直接報 socket 超時。這種情況下不是數(shù)據(jù)庫變慢而是策略性地斷開了連接。壓測時可以把 socketTimeout 調(diào)大一點避免誤判。8.4 變量引用出來是 null結(jié)果集行號與字段大小寫問題現(xiàn)象在后續(xù)請求里用${var_1_id}引用 JDBC 查詢結(jié)果發(fā)現(xiàn)值是 null 或者空字符串。原因排查第一先看結(jié)果集是不是空的。如果 SQL 查不出來數(shù)據(jù)任何引用都是空。用察看結(jié)果樹看響應(yīng)數(shù)據(jù)確認(rèn)是否有數(shù)據(jù)返回。第二看字段名大小寫。MySQL 的字段名默認(rèn)全小寫如果 SQL 里寫了別名比如SELECT id AS userId FROM user那么引用時要寫成${var_1_userId}。建議 SQL 里起別名時統(tǒng)一用帶下劃線的命名如user_id然后引用時保持大小寫一致。第三行號從 1 開始不是從 0 開始。如果變量名是order_result那么第一行是order_result_1沒有order_result_0這個變量。8.5 中文亂碼與編碼問題問題現(xiàn)象JDBC 查詢返回的中文變成問號或亂碼。原因排查大多是連接 URL 里沒有指定字符集。在 MySQL 連接 URL 上加上characterEncodingutf8jdbc:mysql://127.0.0.1:3306/testdb?useSSLfalseallowPublicKeyRetrievaltrueserverTimezoneAsia/ShanghaicharacterEncodingutf8另外檢查數(shù)據(jù)庫表本身的字符集是不是 utf8mb4。如果表是 latin1 而應(yīng)用按 utf8 讀取也會亂碼。8.6 一個容易被忽略的問題壓測機性能不夠最后提一個很多人踩過的坑——壓測機本身的性能不夠。JMeter 是 Java 應(yīng)用100 個并發(fā)線程跑起來時壓測機 CPU 和內(nèi)存消耗不小。如果你在本地筆記本上壓遠程數(shù)據(jù)庫壓測結(jié)果可能不是你 SQL 的真實性能而是筆記本 CPU 打滿后的結(jié)果。怎么判斷壓測時打開任務(wù)管理器或top看看 Java 進程的 CPU 占用率。如果已經(jīng)超過了機器 CPU 的 70% 以上建議換一臺性能更強的機器或者把 JMeter 部署到另一臺服務(wù)器上盡量讓壓測機資源充足確保瓶頸在數(shù)據(jù)庫端而不是客戶端。8.7 問題排查速查表問題現(xiàn)象可能原因解決方案ClassNotFoundException驅(qū)動 Jar 未放到 lib 目錄放入 Jar 包并重啟 JMeterCannot create PoolableConnectionFactoryURL 或賬號密碼錯誤檢查 URL 格式、賬號權(quán)限Too many connections連接數(shù)超過數(shù)據(jù)庫上限調(diào)大數(shù)據(jù)庫 max_connections 或調(diào)小 JMeter 連接池響應(yīng)時間超長連接池排隊或慢 SQL調(diào)大連接池查看慢查詢?nèi)罩咀兞恐禐?null結(jié)果集為空或字段名大小寫不一致確認(rèn)查詢結(jié)果檢查 SQL 別名中文亂碼連接 URL 未指定字符集添加 characterEncodingutf8壓測結(jié)果不穩(wěn)定壓測機資源不足更換壓測機或降低線程數(shù)9. 一個完整的數(shù)據(jù)庫壓測腳本示例講了這么多最后給你一個完整的 MySQL 壓測腳本搭建過程從零到一可以直接照抄。9.1 測試場景模擬 100 個用戶并發(fā)查詢訂單表每個查詢根據(jù)不同的訂單 ID 查詢訂單信息持續(xù)壓測 10 分鐘觀察數(shù)據(jù)庫的吞吐量和響應(yīng)時間變化。9.2 準(zhǔn)備工作MySQL 數(shù)據(jù)庫提前創(chuàng)建好訂單表orders字段包括order_id、user_id、amount、status準(zhǔn)備一個order_ids.csv文件里面放 100 個訂單 ID用于參數(shù)化JMeter 5.xmysql-connector-java-8.0.x.jar已放入 lib 目錄并重啟9.3 腳本搭建步驟第一步創(chuàng)建測試計劃并添加線程組線程數(shù) 100Ramp-Up 10 秒循環(huán)次數(shù)勾選無限在調(diào)度器配置里設(shè)置持續(xù)時間為 600 秒。第二步添加 JDBC Connection Configuration配置項如下Variable Name for created poolmysql_poolMax Number of Connections100Max Wait10000Auto CommitTruePool Validation QuerySELECT 1Database Connection ConfigurationDatabase URLjdbc:mysql://127.0.0.1:3306/testdb?useSSLfalseallowPublicKeyRetrievaltrueserverTimezoneAsia/ShanghaiJDBC Driver Classcom.mysql.cj.jdbc.DriverUsernametest_userPasswordyour_password第三步添加 CSV Data Set ConfigFilename/data/order_ids.csvVariable Namesorder_idDelimiter,Recycle on EOFTrueStop thread on EOFFalseSharing modeAll threads第四步添加 JDBC RequestVariable Name of Poolmysql_poolQuery TypePrepared Select StatementQuerySELECT * FROM orders WHERE order_id ?Parameter values${order_id}Parameter typesVARCHAR這里說明一下因為 SQL 里有?占位符所以 Query Type 必須選 Prepared Select StatementParameter values 里填 CSV 讀取出來的訂單 IDParameter types 填數(shù)據(jù)庫字段類型。第五步添加響應(yīng)斷言Field to TestText ResponsePattern Matching RulesContainsPatterns to Testorder_id這樣就確保了查詢請求返回的結(jié)果中包含 order_id 字段證明查詢是成功的。第六步添加監(jiān)聽器加一個聚合報告和一個察看結(jié)果樹。壓測結(jié)束后聚合報告里可以看到平均響應(yīng)時間、吞吐量、錯誤率等核心數(shù)據(jù)。9.4 跑完怎么分析壓測結(jié)束后我一般這么看數(shù)據(jù)先看錯誤率。如果錯誤率為 0%說明 100 并發(fā)下這條 SQL 沒有出錯數(shù)據(jù)庫連接和查詢都正常。如果錯誤率大于 0查詢具體的錯誤信息常見的是連接池不夠用或超時。然后看吞吐量變化。如果 JMeter 的 Throughput 在持續(xù)穩(wěn)定上升后趨于平緩說明已經(jīng)摸到了數(shù)據(jù)庫的處理上限。此時如果平均響應(yīng)時間還能接受說明數(shù)據(jù)庫還有冗余如果響應(yīng)時間已經(jīng)超標(biāo)比如超過 500ms說明數(shù)據(jù)庫快要撐不住了。最后結(jié)合數(shù)據(jù)庫端監(jiān)控比如 CPU、慢查詢?nèi)罩究雌款i到底在哪個環(huán)節(jié)然后給出測試結(jié)論和優(yōu)化建議。這里有一個小建議壓測時先把線程數(shù)保守一點比如 50跑一輪看結(jié)果再逐步升到 100、200。這樣做的好處是你能看到數(shù)據(jù)庫在不同并發(fā)下的表現(xiàn)曲線而不是一上來就壓到天花板拿到一堆根本沒法分析的數(shù)據(jù)。階梯式加壓是我在實際項目中比較喜歡用的方式。最后說幾句實在話用 JMeter 做數(shù)據(jù)庫壓測門檻真的不高但想做好需要你對數(shù)據(jù)庫本身的運行機制有基本認(rèn)知。我在實際測試項目里見過不少人把壓測腳本配好了、跑出了漂亮的報告但一問數(shù)據(jù)庫端的指標(biāo)完全答不上來——CPU 多少、內(nèi)存多少、慢查詢有沒有、連接數(shù)有沒有到上限全是空白。這種壓測報告說實話價值有限。我的個人建議是壓測數(shù)據(jù)庫永遠要把 JMeter 端的數(shù)據(jù)和數(shù)據(jù)庫端的數(shù)據(jù)結(jié)合起來看。JMeter 告訴你發(fā)生了什么數(shù)據(jù)庫的監(jiān)控告訴你為什么會發(fā)生。兩邊對照才能真正判斷數(shù)據(jù)庫的性能瓶頸在哪里也才能給出可信的測試結(jié)論。如果你只是剛接觸這塊先從最簡單的單條 SQL 查詢壓測入手把 JDBC Connection Configuration 和 JDBC Request 玩熟再慢慢加參數(shù)化、加斷言、加并發(fā)場景。不要一上來就想測多表關(guān)聯(lián)或存儲過程底子打好后面的內(nèi)容都是水到渠成的事。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
黄网在线播放| 久久久国产av美女私房| 打av高清| 亚州色图第三区| 天天射天天| 一卡二卡在线播放| 99久热精品99re6热| 人妻22p| 麻豆久久一区二区三区| 中文字幕老熟妇黄色视频| 日韩免费高清大片在线| 91欧美网| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 国产原创自拍| h无码动漫在线观看| 无码78| 亚州欧美综合| 91丝袜美女| 国模精品娜娜一二三区| 国产精品久久99日日| 九九亚洲| 99久久99久久免费精品蜜臀| 久久视频,这里只有精品 | 狠狠婷婷亚洲中文综合久久| 成人热久久精品| www.99视频| 草草影院最新网址| 熟女91网站| 久久久精品一区二区| 亚洲色图加勒比| 一二三区在线| 夜夜操天天肏| 久久视频,这里只有精品 | 青青五月天| 少妇内射www在线观看视频| 99爱久久视频频| 桃色五月天| 强奸国产在线| 岛国片在线播放| 亚洲日韩97| 伊人 俄罗斯 a v| 中文字幕-区二区三区四区视频中国| 伊人激情| 国产精品无码久久久久2025| 国产一区二区a毛片| 黄色免费网| 天天干夜夜| 亚洲精品国产精品乱码不卡| 粉嫩小泬久久久一区二区| 无码人妻丰满熟妇奶水区毛片| 精品国产乱码久久久久久影片| 高潮的A片激情扒开一区| 91丝袜在线观看| 日韩欧视频| 97色综合中文网| 97操综合| 久久久久久久97| 99久久99久久免费精品蜜臀| 久久婷婷电影网| 欧美真人抽搐一进一出gif| 国产毛片毛片4p懂色| 精品国模无码| 91人妻最真实刺激绿帽| 操婢日韩| 人妻天天夜夜爽一区二区| 天天干天天拍| 亚洲黄色影视| 用力操死我| 色超碰综合| 久久国产999| 日本免费二区三区| 97免费在线| 欧 美 自 拍 偷 拍| 久久精品国产亚洲AV片多多| 床上啊啊啊一区二区三区| 婷婷月色| 操b网站亚洲无码| 天天α片| 欧美色图另类图片| 国产一区在线免费播放| 色综合网1| 欧美性战999| 中国熟女网站| 精品传媒在线一区| 人妻少妇被猛烈进入中| 五月天色图影视| 亚洲射综合网| 亚洲综合另类欧美久久久| 极品后入免费视频| 麻豆成人AV| 欧美成人四级在线播放| 亚洲精品丝袜| 秋霞网无码| 欧美国产日韩高清在线| 一区二区蜜臀| 国产97在线播放| 精品人妻久久久| 国产又黄又粗的视频| 涩涩五月天| www.91欧美| 78精品| 69少妇一区二区| 亚洲国男人的天堂| 无码精品啪啪啪一区二区三区三州 | 怡红院亚洲怡春院av| 日韩肏逼视频| 人妻熟女午夜精品在线| 极品出轨视频网站| 18禁免费视频| 一区,二区,三区视频| 天天爽天天操啊啊啊| 约操熟妇| 加勒比av官网在线| 综合免费无码中文| 物业黑人 AV一区| 18禁止看精品中文字幕| 欧色综合| 夜夜草天天| 99热精品在线| 人妻少妇精品视频一区二区三区| 亚洲A曰本VA欧美VA视频| 成人午夜小视频手机在线看| 性生活无遮挡纯毛片在线看| 2024黄色视频| 欧美性区| 都市久久精品激情亚洲| 欧美夜色| 艹精品| 一区二区三区四区姦女| 久久av无码| 欧美视频在线第3页| 久久久111| 中文字幕奈奈美被公侵犯| 冬京热男人的天堂| 国产一区二区三区白丝| 中亚精品极乱| 亚洲欧美另类激情小说| 99热超碰| 日本不卡高清视频| 欧美亚洲涩涩| 亚欧性爱在线无码| 级做a爱无码性色永久免费| 97色插| 男人把坤坤插入女人的下体| 亚欧性爱ab| 国内成人圈中文字幕无码视频| 国产精品久久99日日| 精品一区二区麻豆| 在免费jIzzjIzz在线视频| 97亚洲国产| 99久久99久久综合| 欧美亚洲情色| 色娱乐色呦呦夜夜夜夜av| 一区二区三区探花在线观看| 免费男人的天堂| 色婷婷五月天| 伊人国产成人av网站| 亚州久久9| 日本性爱少妇| 1769一区| 东京热毛片调教| 亚洲欧美校园另类春色| 亚洲av淫乱| 日韩97在线| 91成人在线| 在线观看色视频| 久久r精品| 在线女人91| 欧美黄片欧美黄片xxx| 97色妞| www网站黄| 欧美日本不卡| 蜜伊人色综合97| 黄片com.| 被窝影院午夜看片无码| 无码人妻毛片丰满熟妇精品区| 国产免费一区在线观看| 精品人妻中文字幕4399| 精品传媒在线一区| 福利天天都操| 国产后入精品| 蜜乳AV免费观看| 在线小说视频一区| 亚洲欧美国产中文字幕| www激情| 草草影院最新网址| 日本操大逼| 超碰欧美97| 丝袜天堂网| 精彩国产视频播放1区2区| 国产亚洲精品第一最新| 性爱视频无打码在线观看| 久久久性爱| 色噜噜国产精品视频一区二区| 啊啊啊啊啊操我视频| 在线99热| 日本道久久综合色色| 另类TS人妖一区二区三区 | 欧美午夜熟妇黑人精品91| 久久超碰亚洲人| 黑人嘿嘿嘿超爽免费视频| 中文字幕第2页| 亚熟hd视频在线| 男人干美女| 亚洲男人天堂2019| 深夜国产一区二区三区在线看| 国产毛片毛片4p懂色| 国语精品对白| 欧美综合天堂| 九月伊人中文字幕| 91性情| 久热伊人| 91操熟女| 你懂的在线观看区国产| 97精品一区二区视频| 久久超碰日韩精品| 91国产操逼视频| 久久久久久九九九| 久久神马| 香蕉热人人精品| 亚洲熟女乱色一区二区三区| 亚洲 日本 国产 综合| 黄色片A级一区二区三区| 久久久精品网| 无遮挡一级毛片视频免费的| 99久久久久| 九九热AV| 亚洲五月婷| 色九九综合| 亚洲激情综合| 欧美激情超碰777| 大香蕉伊人在线成人AV在线观看| 伊人玖玖网| 插插综合网天天影视网| 青青青青操国内视频在线| 大鸡巴久久| 欧美96在线|欧| 日韩少妇无码| 大学生口爆吞精| 中文字幕一区二区在线日韩精品| 香蕉人人操tv| 天天干天天日天天射黄色| 日本高清电影欧美色图| 大香蕉欧美国产日韩高潮| 国产精品3| 操熟女91| 亚洲精品乱码线路中文字幕| 日本综合色图| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 久久超碰、| 国产精品青青草| 青青草亚洲一区| 欧美性性性| 男人的天堂一区三区| 99日韩| 亚洲熟妇图片| 欧美日韩亚洲五月天婷婷| 另类欧美| 香蕉黄色一级视频| 国产亚洲精品美女久久久m| 激情AV| www.操| 十八禁电影伊人网| 日本成a人v网站在线观看| 午夜视频好爽啊| 久久免费精彩视频| 中文久久一区| 人妻超碰青青草98| 亚洲影院365| 色吧综合网| 中文字幕一区 二区三四五 区日 日骚| 97色插| 97色冈| 四季AV综合网址| 无码人妻系列少妇| 日韩99999| 国产不良强奸视频免费看| 99热婷婷| 影音资源男人日韩| 欧美精品久久久久久久久88| 午夜精品久久久久| 九九操久久国产免费视频| 无码人妻一区二区三区色欲aⅴ | 97青青操视频| 国产精品视频在线观看| 日韩欧美经典在线观看| 金典av| 久操操AV电影| 91在线视频免费中出| 亚州欧美在线| 亚洲色图久久精品蜜| 国产高清吃奶免费视频网站| 欧美日韩国产中文超碰| 国产乱子伦一区二区三区在线观看| 久久男女激情视频网站| 啊啊啊在线看| 国产成人在线观看综合| 成人三级片一区二区三区视频| 国产三区免费在线观看| 黄久在线| 国产乱伦性爱AV| 少妇人妻无码| 亚洲国产成人福利在线观看| 91无码精品| 男人的天堂久久狠| 男人的天堂久久| 精品九九九九九| 欧美香蕉视xxx| 综合97亚洲| 欧美综合网| AV男人天堂网| 九九拍拍精品视频在线播放 | 亚码人妻| 欧亚不卡| 亚熟hd视频在线| 狼人综合婷婷激情四射 | 国产女人高潮嗷嗷嗷叫小说| 少妇熟女视频一二三区| 亚洲日韩美女丝袜美腿人妻视频| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 国产精品久久久久久久免牛肉蒲团| 久热婷婷| 欧美日日网| 一区二区三区四区五区高清无码永久视频| 日本女人操逼| 丁香五月激情综合| www.狠狠干.coom| 中文字幕国产精品1区| 亚洲综合色男人网| 日本青青草在线| 成人影 天天操 亚洲| 九九九九日本 | 炮色五月| 久久久久久久一级黄色打同平台| 国产偷拍网站| 日韩熟女精一区二区三区不卡| 91欧美丝袜| 天天操夜夜操| AAA久久| 一区二区精品更新提醒| 女性喷水高潮在线观看| 后入综合久久| 色九九九综合| 日韩国产乱子伦App| 亚洲一区二区三区中文字幕| A片 AV一级在线播放观看免费| 啊啊啊久久| 男人的天堂2018东京热啪啪啪| 女优大全 - 91n| 亚洲av国产av综合av卡| 婬女免费一二三区A片| 俺去也婷婷| 五月婷色| 九九热视频在线观看| 台湾佬中文娱乐自偷自拍| 午夜欧美J进J出白浆流出久久久| 国产中文字幕在线观看| 超碰在线人妻中文字幕| 亚洲中文日韩精品| 人妻精品视频一区二区| 国产60区。| 亚洲色综合| 在线 制服丝袜中出 人妻| 97情超碰色| 精品欧美老熟女一二区| 国产成人精品亚洲日本| 香蕉久久精品| 国产大学生口爆吞精合集| 97人亚洲综合字幕| 久久成年片色大黄全免费网站| 啊…啊…操我用力操我| 日韩精品午夜操呦呦不卡影院| 国产网站在线播放| 日本亚欧爱爱| 色婷婷影院| 91 综合网| 天天添天天干电影| 蜜臀无码一区二区| α√在线| 精品日日人妻| 91午夜无码| 在线观看高清AV| 亚洲一区二区三区麻豆传媒| 高清不卡一二三区视频......| 免費黃色視頻觀看一| 中文字暮97| 久久国产999| 99婷婷一区二区| 久久成人午夜精品影院 | 日韩AV电影网站| 我要看免费韩日黄片| 俺去俺来也在线www| 久久久精品成人国产| 丝袜美腿av女优在线| 99热伊人| 国产一区二区在线播放| 97资源久久| 粉嫩不卡一区二区性爱| 欧美九九爱| 一区二区三区日韩欧美| 国产懂色精品国产av| 国产老熟女| 秋霞一集毛片观看| 91强在线播放| 亚洲 欧美 91| 骚女天天综合网| 天天超级碰碰碰| 91蜜臀熟女| 92人人操人人| 天天干天天舔| 97超碰9| 国产麻豆一区二三区| 欧美精品另类人妖xxxx| 天天夜躁日日躁狠狠2002| 欧美 日韩第一性色| 日韩精品99999| 日本污ww视频网站| 萌白酱自拍视频| 国产精品不卡一区二区三区av| 欧美综合色图网| 中文日韩欧美熟| 伊人色综合超碰| 国产一级作爱毛片| 亚洲高清无码在线桃色| 黄色AAAAAAAAAAA大片| 亚洲无码 国产无码| 北野未奈加勒比av| 大香蕉92| 欧美久久人体| 久久人体一区二区| 97操97干| 欧美日韩另类激情图片| 亚洲男人天堂av| 搡老女人老91二区| 亚洲美女AV无码| 国内毛片四区| 久久久国产亚洲精品系列| 美女诱惑爱爱| 久久av一级av少妇av高潮| 不卡视频一区蜜桃视频| chaopen97久久| 一区二区久久天天干狠狠| 超碰成人公开| 天堂涩涩| 乱伦日本色图AⅤ| 劲爆欧美人妖三区91| 激情综合二| 欧美中文字幕一区| 人人爱人人乐人人操| 日韩兔费看黄片| A级在线视频| 欧美激情性爱视频网站| 久久久啊啊啊| 久久人人看| 96麻豆精品一区二区三区| 情色五月天就去干| 亚洲第一页色| 国产精品自产拍在线观看社区| 九九九九久久久| 另类图片五月| 中文在线久久字幕| 成人av动漫在线观看| 日本影视久久免费| 日韩中文9| 国产黄色视频久久| 亚洲天堂 视频你懂的| 亚洲黄色影视| 超碰久久性爱| 天天弄天天操| 强奸乱伦动态污图免费 | 精品熟女一区=区三区| 六月丁香五月婷婷| 九九九热精品| 在线观看黄色电话| 99re在线视频国产| 综合国产影视三级| 伊人五月天青青草婷婷| 欧美大片91| 99999精品视频| 午夜欧美J进J出白浆流出久久久| 一本大道不卡一二三区| 嗯嗯啊啊视频一区二区三区| 免费观看网黄| 一级黄碟在线看| 欧美系列在线一区二区| 60秒免费小视频| 秋霞久久亚洲精品成人| 69丨亚洲丨精品丨入口免费播放| 亚洲无码免费看| 乱色老一区二区三区的观看方式| 91呆哥人妻| 国产97色在线| 欧美九九99久久精品| 精品成人亚洲午夜电影| 风月影院男女十八禁| 巨爆乳肉感一区二区三区竹菊影视| 欧美少妇高潮| 亚州成人A√| 国产精品久久久久无码A√| 欧美91精彩| 日韩免费性爱视频在线观看| 欧美91在线| 男生女生啊啊啊啊| 日欧操屄视频| 天天干天天舔| 欧美人妻制服| 天天色怡春院| 青青草原狼av| 黄色十八禁| 久久亚洲日韩国产欧| 久久透逼视频| 久久久久久久久久久久欧美日| 亚川综合视频| 亚洲一二三四区在线免费看视频| 久久久久免费看少妇A片特黄| 欧日a| 五码视频在线观看| www熟女乱伦com| 国产女同在线观看视频| 东京热视频网| 青娱乐欧美激情一区二区| 九久9精品| 99re不伦| 嗯啊不要啊在线| 手机在线看片免费人成视频| 日韩精品高清资源在线| 嗯嗯不要视频| 男人的天堂2010| 日本日逼高清| 高清国产av无码| 无码久| 97人妻免费中文字幕| 91oumei| 九九九久千久久激情蜜桃在线看 | 人人妻人人玩人人澡人人爽| 97色色网| 一区二区三区在线资源| 日本岛国黄色网址 | 无码天天操| 男女猛烈无遮掩视频免费软件| 亚洲国产中文字幕| 欧美亚洲第1页| 超碰三级秋霞| 国产精品午夜高潮呻吟久久av| 欧美自拍偷拍综合图片| 极品国产内射| 五十路成人在线视频二区三区| 丝袜性亚洲| 亚洲五月婷| 亚洲精品一二区| 日韩三级在线观看网站| 蜜桃臀一区二区三区久久| 99国产精品免费| 久久黄色网址| 草草影院在线视频| 九九综合久久| 亚洲国产欧美中文永久| 国产高清成人mv在线观看| 超碰在线人妻中文字幕| 双插性欧美一二三区| 3p国产欧美99热| 欧美性生活男人的天堂| 五十路熟女人妻一区二区在线观看| 国产一区二区精品在线视频| 国产精品国产| 校园春色宗合网| 亚洲欧美一区二区不卡视频播放 | 熟啊v色欧美热| 青青青国产| 口爆综合网| 国产久久一区二区午夜| 欧美九9 9 9| 一级黄色影片| 加勒比大香蕉视频在线| 亚洲精品视频二区| 91 国产丝袜在线放观看| 青青11操操操操操操操操| 大香蕉97久久| 日本美女性生活久久久久久久| 密桃99999| 翘臀vidoes| 久久极品一区二区| 97久久精品亚洲中六字幕| 久久精品一区| 91色色综合| 大香蕉在线SuP| com 首页 18岁 禁区 女优 免费 精选 同城 | 99亚洲天堂| 欧美日综合| 国产伦精品一区二区三区视频女| 九九热免费国产视频婷婷伊人五月 | 青娱乐蜜桃臀AV色婷| 欧美精品91| 97超级欧美| 激情小说亚洲图片| 国产伊人精品在线| 99人妻| 大香蕉黄色一级片免费看| 看日韩美女二区三区免费操逼视频 | 综合影院永久入口国产| 国产一区在线观看无码AV| 亚洲中文日韩欧美大香蕉视频| 手机在线观看不卡无码av| 久久欲| 五月天婷精品激情| 综合网,亚洲,欧美| 亚洲综合一| 性色aV一区二区三区噜噜| 综合亚洲欧美精品日韩?v| 日韩欧美中文日韩欧美色| 五月天色图| 91久久18禁| 男人的天堂99| 亚洲国产欧美另类自拍| 天天舔天天| 新精精品久久精品| 又粗又长又大国产不卡| 无码WWW免费视频网站| 亚洲 综合 欧美| 老鸭窝黄色视频网站| 999国产精品999久久久久久| 蜜乳成人AV| 欧美极品性爱天天射| 丝袜熟女2P| 极品内射| 啪啪自拍九九综合| 十八禁的黄污污免费网站| 国产成人www免费人成看片| 蜜桃臀 后入 一区 二区 三区 在线| 另类av天堂| 先锋影音av先锋一区| 尤物网址| 日本亚洲vr欧美不卡高清专区| 超碰久草| 日韩国产欧美伦理在线| 久久久噜噜噜久久久| 欧美国产成人在线| 久久粉色| 日韩成人大片一区二区| 鸥美极品| 超碰97综合| 精品国产www久久| 91久久堂| 久久人妻| 九色婷婷| 日韩色图 一区二区| 99国产精品视频尤物| 狼人综合婷婷激情四射 | 国精综合一二三区影视| 超碰在线人人射| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 亚洲91射| 丰满高潮18xxxx| 日韩 成人 有码| 人人干黄色| 九九英色视频| 成人性爱免费播放| 欧亚不卡| 岛国片在线播放| 夜夜嗷嗷一区二区| 级做a爱无码性色永久免费| 国产传媒美日韩av| 91老熟女视频| 久久精彩视频9| 亚洲一区二区在线观看91| 丝袜夫妻自拍| 一级免费啪啪片| 一区二区三区视频| 99rre在线精品99re8| 国内精品久久久久影院亚洲| 大白逼三四级| 伊人五月天| 花花AV导航| 国产少妇与亚洲av| 欧美亚洲首页| 荡小穴在线观看| 国产家庭乱伦表演| 国厂麻豆77q4| 免费人成?大片在线播放| 欧美特黄视频网站| 亚洲nv男人的天堂网| 农村女一级毛卡片| 久久精品视频在线观看| 国产成人手机视频激情| 精品国产乱码久久久久久日本公司| 激情专区综合| 97天堂| 97视频7| 国产精品爱欲| 伦理日韩国产久久| 人妻熟女字幕一区二区| 亚洲欧美高清无码| 日韩八十路老熟女| 五月天婷婷成人网| 亚洲97在线观看| 日日夜夜国产综合| 久久AV无码网址| 99热这里只有精品18| 亚州色站 日韩电影| 精品一二三区久久AAA片| 日韩大香蕉精品在线视频| 91久久久久久久| A级国产欧美激情在线| 天堂涩涩| 天天欧美色| 中文字幕中文字幕一区二区| 亚洲黄色AV电影| 日韩精品9999| 五月天开心网| 五十路三级片| 激情五月天中文字幕色| 天堂网 主播 亚洲| 丁香五月激情综合| 2019久久久久久久久福利| 欧美另类丝袜熟女| 天无日色综合| 在线视频日韩欧美国产| 日韩猛交| 91美女视频电影| 中文字幕版| 色色五月婷婷| 五月天玖玖资源站| 成人AV超碰免费在线| 91亚洲综合在线| 久久久久久少妇| 97天天插| 久久久久国产精品久久久| 69视频入口| 久久久久久91香蕉国产| 夜夜操2028| 久久无码电影| 日本十八禁免费看污网站| 碰碰97| 欧美BT 亚洲色图| 欧美性综合| 91在线色| 99精品无码| 国产精品一级片在线看| 亚洲图片日本AⅤ欧美在线| 蜜桃久久一区二区| 久久久久久久久久久久97| 2019AV天堂| 啊…啊…操我用力操我| 99人人干| 日本中文字幕在线电影| 91老熟妇| 99999精品| 少妇高潮九九九九| 欧美激情在线观看视频| 亚洲天天天| 99re6在线视频精品免费完整版安卓版| 诱惑人妻欧美一区在线播放| 色噜噜国产在线| 亚洲综合色男人网| 伊人亚洲国产一成人久久精品,久久| 日韩成人在线性爱视频| 欧美18 在线观看| 人人搞人人插人人操| 国产精品人妻无码久久久互動交流| 国产精品乱码久久久久| 男人综合网| 在线视频资源| 中文字幕在线免费观看| 欧美亚洲首页| 欧美性第一页| 蜜乳中文字幕a在线| 美日韩男女操屄视频| 亚洲性爱成人| 日韩亚洲中文有码视频| 成人免费在线网站| 操逼日韩无码 | 国产懂色精品国产av| 天天草天天干天天日| 精品伊人久久久大香线蕉小说| 国产精品免费视频不卡| 激情五月天婷婷| 天天干一区二区| 手机不卡视频不卡在线一二三区| 熟妇人妻一区二区三区| 天天干天天日天天射黄色片| 色综合99999| 超碰 国产熟女精品一区| 伊人991| 国产懂色精品国产av| 69人妻精品一区二区绯色| 五月激情在线| 人人操天天爽| 久久网亚洲| 精品国产a∨一区天美传媒| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 亚洲美腿丝袜香蕉影视欧美成人| 97视频播放| 精品一区二区三区国产| 亚洲av综合色| 在线 制服丝袜中出 人妻| 色哟哟-国产专区| 校园春色欧美| 亚洲欧洲激情卡通另类文学四射小说网站 | 大干人妻| 60秒不遮不挡| 在线播放一级无码视频| 国产一级αv免费看片| 中文字暮97| 久污| 日韩免费中文字幕视频| 99热99在线播放激情| 乱精品一区字幕二区| 日韩AV色图| 五月天精品| 97综合在线| 人人操人人摸人 | 夜间福利片1000无码| 96久久科窝| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 黑人精品成人一区二区三区| 99在线精品视频| 亚洲欧美国产va在线| 久草午夜| 综合久| 9999亚洲精品| 国产高清亚洲日韩一区| 高清无码国产亚洲| 久久天天摸| 日韩欧美三级| 无码操逼网| 日逼五月天| 中文久久久| 人人插人人摸人人| 日本丝袜美腿人妻九九| 欧美激情在线观看视频| 欧美强奸一区二区诱惑| 999 久久久| 欧美一二三级精品在线| 精品少妇一区二区三区免费观看| 欧美色日本| 黄色片A级一区二区三区| 中文啪啪视频| 欧美激情黑人| 午夜福利免费福利视频| 欧洲小说色图视频另类| 99久久精品无码一区二区毛片免费 | 中文字幕三四五区| 欧美性爱另类综合| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | AV和黑人在线播放| 青青草视频久久久久| 麻豆色99999| 一起草精品人妻| 精品9999| 国产做?爰片久久毛片?片美国| 国偷自 一区二区| xxx0国产在线播放| 内射中国少妇高清视频免费视频| 亚洲人成网站7777| 欧美最婬乱婬爆婬性视频 | 丁香五月天久久精品视频一区二区三区| 国产精品在线网站| 日本Xx性爱| 中文字幕午夜精品久久久| 婷婷五月成人| 欧美高清无码免费视频高清版| 天天摸夜夜摸| 亚洲AV性爱电影| 中文有码9| 91人妻超碰| 久超碰在| 中国AAAAAA黄色片| 欧美 亚洲 91| 91无码中出人妻视频| 国产91影院| 麻豆精品三区视频| 五月丁香影视| 波多野结衣被操50分钟免费视频 | 欧美丰满少妇xx高潮| 人人摸人人舔一区二区| 久久超碰爱| blacked精品一区国产| 欧美熟妇色| 亚洲精品欧洲精品| 97香蕉碰碰人妻国产欧美| 精品国产乱码久久| 日韩大香蕉精品在线视频| 国产在线76页| 日韩久久.一级黄色片| 在线欧美亚洲| 亚洲黄a三级三级三级看三级| 五月丁香婷婷色| 乱伦一区二区三区‘| 男人综合网| 少妇第一页| 禁止观看美女黄| 丁香五月激情综合国产| 一个人免费视频观看在线WWW| 久久成人东京热人妻| 欧美亚洲丝袜美女电影| 柠檬AV导航| 中文字幕一区二区在线日韩精品| 99热伊人| 人澡逼| 樱花草社区www中国| 婷婷中文字幕| 久久久精品视频免费观看| 13小男生GAY自慰脱裤子| 91亚洲网站| 中字一区| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV | 亚洲精品aa久久伊人| 亚洲熟女乱色一区二区三区| 综合第一页| 久区视频| 国产97/欧美| 激情婷婷丁香| 精品九九九九九九九九九| 欧美 青青草| 青青草密桃在线播放| 99激情视频| 无码国产精品午夜不卡(| 97人妻免费中文字幕| 无码久久亚洲高清,| 97国产人人| 国产福利合集| 美欧色综合| 久久国产精品一区二区| av2014 日韩在线中文字幕| 欧美亚洲成人在线一区二区三区| 久久水蜜臀亚洲AV无码精品| 中文字幕视频2区| 麻豆2区1区天美| 久9热| 日本媚薬中文字幕在线| 毛片视频白嫩| 久草久热| 亚洲日本男人天堂网| 蜜臀久久99精品久久久久久久久| 91色情黑丝搞鸡在线观看一区二区三区三州 | 久久久久9999| 九九aV| 9999久久久久| 九九综合| 神马精品视频| 一区,二区,三区视频| 亚洲 暴爽 AV人人爽日日碰| 人妻欧美| 啊啊啊想要| 久久产精品一区二区三区电影| 不卡日本一区二区| 操逼操逼操| 久久国产逼| 国产高清无码一区三区二区| 一区操逼日比视频| 国产亚洲日本精品在线| 无套内射性感少妇视频| 这里有精品| 嗯嗯嗯嗯啊啊啊好紧好大| 国产精品久久久久久夜夜夜| 天美传媒AV国产在线| 97天天插| 91综合中文字幕| 91伊人久| 日本一级性爱| 久99久视频精选| 日日黄色三级网站| 热热色国产一二区AV| 欧美双插| 国产黄色影片在线观看| 操逼逼无码| 1区2区3区在线视频| 亚洲欧美一区二区不卡视频播放 | 亚洲婷婷丁香在线| 岛国大片国产| 色色色色综合网| 夫妻四区五区六区| 成人在线午夜视频一区| 夜夜黄| 天天干天天操天天操夜夜操天天操| 国产日产精品久久快鸭的功能介绍| 综合欧美日本三级| 性欧美天天| 欧美图片色五月天| 乱伦熟妇一区二区| 国产AV高清AV无码| 久久久久久久久久久久久久久乱码| 91/欧美| 日韩啪啪视频| 嫩草一区二区在线观看| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 国产乱人妻精品入口| 新怡红院| 日韩精品国产一区二区| 色婷婷亚洲婷婷| 亚洲污污网站| 97精品| 亚洲图片欧美在线视频| 白丝jkav| 囯产精品久久久久久久久久二区三区| 日韩色| 久久9久9久99久9久9| 欧美日韩妖精91com| 欧美的性爱网站免费| 久久极品伊人| 亚洲成人帖图| 免费看国产曰批40分钟怎么下载| 日韩pv中文| 久久久久久久久久久久97| 啪啪AV导航| 午夜成人福利影视| 福利视频网站| 国产成人网| 亚欧美综合| 日本欧美一区二区三区免费| 爱欲AV| 久久狠狠色噜噜狠狠狠狠97| 久久丁香| 91n.欧美| 成人性爱高清视频免费看| 99精品丰满人妻| 2019精品国产无码成人| 中文伊人大香蕉视频| 国产成人五月天丁香花| 亚洲成?V人片在线观看福利| 蜜臀久久精品久久久久视频| 国产一进一出视频网站| 九九热超碰97亚洲最新香蕉| 日韩在线国产字幕| 欧美另类色图片| 96麻豆精品一区二区三区| 婷婷色五月激情| 啊啊啊好大好深| 日韩九区| 一区二区三区看视频| 六十路日本| 九久久九九久视频| 91操碰| 超碰地址久久| 防屏蔽在线视频| 亚州综| 中文啪啪视频| 激情综合网亚洲| 欧美 亚洲 制服 精品| 青娱乐休闲视频在线观看| 久久综合18p| 国产成人在线观看网址| 国产乱婷婷精品二区三区| 麻豆三极片| 日本999精品视频| 少妇99成人麻豆| 欧美 亚洲 在线| 猛交交| 高清无码久操视频| 激情终合网| 日韩欧美中文| 亚洲日韩狠狠撸视频| 婷婷色色五月| 亚洲色图综合| 一区,二区,三区视频| 亚洲黄色网址视频| 美女91网址| 天美国产精品| 国产精品露脸在线观看| 日韩精品影视| 九九热超碰| 超碰日韩人妻| 丝袜狂射91| 激情综合五月天| 日韩福利综合一区| 欧洲自拍色图gif在线| AAA久久| 亚洲乱码精品一区二区| 婷婷五月天无码| 99热18| 五月丁香六月综合缴清无码| 亚州欧美总和| 桃色五月天| 欧美精品23| 亚洲一区二区中文字幕| 蜜臀AV一区二区三区激情综合| 超碰在线观看av不卡| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 亚码激情| 天堂无码精品国产久| 精品999一区二区| 四虎国产成人精品免费一女五男| 久久精品色欧美aⅴ一区二区| 日产操逼| 狠狠97| 色噜噜人妻丝袜AV资源| 国产伦精品一区二区三区在线观| 久久国产AⅤ| 农村少妇久久久久久久| 亚洲美女色图| 五月激情天| 日韩 欧美 视频 在线 一区| 亚洲天天在线| 日韩精品影视| 亚洲一二三精品久久网 | 欧美淫乱视频| 97爱欧美| 久久xx| 亚洲精品一区二区三区在线播放| 久久久中文| 日韩AV噜噜噜一区二区三区四区| 丰满搜索结果 -第18页- 久久高清无码 | 26uuu欧美| 最新中文字幕精品在线| 日韩免费中文字幕视频| 亚洲天堂电影网99999| 九九九九九九九九九五码| 日韩人妻资源网| 青青草丝袜在线视频| 国产成人自拍视频视频| 日韩无码极品| 怡红院成人视频| 亚洲drav色图| 91九九九逼| 青青操97| 大香蕉男女超碰精品在线| 人妻99p| 盗摄女人妻在线| 免费观看性欧美一级| 操国产高清| 亚洲毛片基地专区| 欲香欲色综合天天伊人| 色香综合天天影视综合 | 久久国99999| 性色高清在线| 精品99999久久久久久| 日韩天美| 97天天爽| 国产伦精品一区二区三区视频女| 亚洲成人免费电影| 睡产熟女乱伦| 亚洲高清国产理伦片| 日韩无码a片| 不卡av在线中文字幕| se吧提供91精品国产91久久久久久| 国产精品白丝| 91色图| 四虎精品永久在线播放| 日本精品五区| 久久久久亚洲| 黄片www视频免费| oumeisetu综合| 美欧色综合| 人人妻人人爽| julia国产在线 | 人人潮人人摸| 人人看欧美性爱| 久久久精品无码亚免费| 国产极品一区二区三区三州| 自拍大香蕉乱插| 强免费黄色网址| 狠狠操狠狠插| 亚洲精品819| 青青操少妇| 加勒比人妻综合| 性感美女啊啊啊在线| 男人的天堂Va| 亚洲欧美日韩中文播放| 成人97人人超碰人人|