日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

Delphi FireDAC連接池高并發(fā)配置避坑實(shí)戰(zhàn)手冊(cè)

Delphi FireDAC連接池高并發(fā)配置避坑實(shí)戰(zhàn)手冊(cè) 簡(jiǎn)介這份PDF文檔面向使用Delphi進(jìn)行企業(yè)級(jí)應(yīng)用開(kāi)發(fā)的技術(shù)人員尤其是需要應(yīng)對(duì)高并發(fā)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)場(chǎng)景的開(kāi)發(fā)者、架構(gòu)師與DBA聚焦FireDAC連接池配置中的常見(jiàn)陷阱與優(yōu)化思路。文檔共54頁(yè)圍繞連接池基礎(chǔ)原理、核心參數(shù)詳解、多數(shù)據(jù)庫(kù)類(lèi)型配置差異、性能優(yōu)化策略、常見(jiàn)問(wèn)題排查及監(jiān)控自動(dòng)化等模塊展開(kāi)對(duì)MaxConnections、ConnectionLifeTime、RetryConnectCount等關(guān)鍵參數(shù)逐一剖析并給出連接泄漏、死鎖、超時(shí)等典型故障的診斷與修復(fù)路徑。資源包為單一PDF文件大小約4.51MB支持目錄章節(jié)跳轉(zhuǎn)與閱讀器左側(cè)大綱快速定位文字、圖表、函數(shù)與目錄顯示完整條理清晰。目前已有193人學(xué)習(xí)查閱適合希望系統(tǒng)掌握FireDAC高并發(fā)配置、避開(kāi)常見(jiàn)坑點(diǎn)并提升數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)穩(wěn)定性的中高級(jí)Delphi開(kāi)發(fā)者參考。1. 從一次連接池耗盡說(shuō)起這份手冊(cè)到底能解決什么凌晨?jī)牲c(diǎn)監(jiān)控告警突然炸了——生產(chǎn)環(huán)境的訂單服務(wù)大面積超時(shí)日志里清一色[FireDAC][Phys][MySQL] Too many connections。排查到天亮才發(fā)現(xiàn)問(wèn)題不在 SQL 慢查詢(xún)也不在數(shù)據(jù)庫(kù)服務(wù)器配置而是 FireDAC 連接池的MaxPoolSize設(shè)成了默認(rèn)值而業(yè)務(wù)側(cè)一個(gè)沒(méi)關(guān)好的TFDQuery把連接全占死了。這種翻車(chē)場(chǎng)景在 Delphi 企業(yè)級(jí)項(xiàng)目里幾乎每個(gè)團(tuán)隊(duì)都遇到過(guò)至少一次。這份《Delphi數(shù)據(jù)庫(kù)連接池FireDAC高并發(fā)配置避坑手冊(cè)》就是沖著這類(lèi)問(wèn)題來(lái)的。它不是 FireDAC 的 API 字典而是一份圍繞高并發(fā)場(chǎng)景、把連接池參數(shù)講透、把配置陷阱標(biāo)出來(lái)的實(shí)戰(zhàn)文檔。全文 54 頁(yè)覆蓋從連接池工作原理、核心參數(shù)詳解到多數(shù)據(jù)庫(kù)配置差異、動(dòng)態(tài)調(diào)優(yōu)、監(jiān)控集成和故障排查的完整鏈路。適合兩類(lèi)人一是剛接手 Delphi 項(xiàng)目、對(duì) FireDAC 連接池只有模糊認(rèn)知的開(kāi)發(fā)者二是已經(jīng)在生產(chǎn)環(huán)境跑著高并發(fā)服務(wù)、被連接泄漏和超時(shí)問(wèn)題反復(fù)折磨的架構(gòu)師。如果你正在用 Delphi 10.4 Sydney 及以上版本、FireDAC 2.0 及以上版本做多平臺(tái)數(shù)據(jù)訪(fǎng)問(wèn)這份手冊(cè)里的參數(shù)表和配置模板可以直接抄作業(yè)。2. FireDAC 連接池的底層邏輯為什么你的配置總是不生效很多開(kāi)發(fā)者配連接池的方式是“照著別人的參數(shù)抄一遍”結(jié)果發(fā)現(xiàn)同樣的MaxPoolSize50在 A 項(xiàng)目跑得好好的到 B 項(xiàng)目就頻繁超時(shí)。根本原因在于沒(méi)搞懂 FireDAC 連接池的復(fù)用機(jī)制和參數(shù)之間的聯(lián)動(dòng)關(guān)系。這一章把底層邏輯拆開(kāi)后面配參數(shù)時(shí)才知道每個(gè)數(shù)字在影響什么。2.1 連接池的獲取與歸還路徑FireDAC 的連接池不是獨(dú)立進(jìn)程它由TFDConnection組件內(nèi)部維護(hù)。當(dāng)你調(diào)用FDConnection.Open時(shí)實(shí)際發(fā)生的是FireDAC 先檢查當(dāng)前連接定義對(duì)應(yīng)的池中是否有空閑連接有就直接復(fù)用沒(méi)有就根據(jù)MaxPoolSize判斷是否創(chuàng)建新連接。關(guān)鍵點(diǎn)在于——連接歸還發(fā)生在FDConnection.Close或組件釋放時(shí)而不是查詢(xún)結(jié)束后。這意味著如果你在一個(gè)方法里Open了連接、執(zhí)行完查詢(xún)卻沒(méi)有Close這個(gè)連接會(huì)一直被標(biāo)記為“使用中”池里可用連接數(shù)只減不增。常見(jiàn)做法是配合TFDQuery的Connection屬性自動(dòng)管理但更穩(wěn)妥的方式是在try...finally里顯式關(guān)閉。下面這段代碼展示了標(biāo)準(zhǔn)的獲取與歸還路徑procedure TDataModule1.ExecuteQuerySafely; begin FDConnection1.Open; // 從池中獲取連接無(wú)空閑則按 MaxPoolSize 創(chuàng)建 try FDQuery1.Connection : FDConnection1; FDQuery1.SQL.Text : SELECT * FROM orders WHERE status :status; FDQuery1.ParamByName(status).AsString : pending; FDQuery1.Open; // 處理結(jié)果集 finally FDQuery1.Close; FDConnection1.Close; // 關(guān)鍵歸還連接到池而非物理斷開(kāi) end; end;邏輯說(shuō)明FDConnection1.Open觸發(fā)池的獲取邏輯FDConnection1.Close觸發(fā)歸還邏輯。參數(shù)MaxPoolSize控制池的上限MinPoolSize控制初始化時(shí)預(yù)創(chuàng)建的連接數(shù)。如果MinPoolSize5、MaxPoolSize50啟動(dòng)時(shí)池里就有 5 個(gè)連接待命并發(fā)上來(lái)后逐步擴(kuò)展到 50 個(gè)超過(guò) 50 的請(qǐng)求會(huì)進(jìn)入等待隊(duì)列等待時(shí)間由ConnectionTimeout決定。2.2 連接生命周期與空閑回收的聯(lián)動(dòng)ConnectionLifeTime和ConnectionIdleTime是兩個(gè)最容易配錯(cuò)的參數(shù)。前者控制連接從創(chuàng)建到被強(qiáng)制回收的總時(shí)長(zhǎng)后者控制連接在池中空閑多久后被釋放。很多開(kāi)發(fā)者把ConnectionLifeTime設(shè)得很大比如 86400 秒以為這樣能減少重連開(kāi)銷(xiāo)結(jié)果遇到數(shù)據(jù)庫(kù)服務(wù)器端的wait_timeout先到期連接被服務(wù)器單方面斷開(kāi)客戶(hù)端卻不知道拿到的就是一個(gè)“死連接”。正確的做法是讓ConnectionLifeTime小于數(shù)據(jù)庫(kù)服務(wù)器的超時(shí)時(shí)間。以 MySQL 為例默認(rèn)wait_timeout是 28800 秒8 小時(shí)那么ConnectionLifeTime建議設(shè)在 3600 到 7200 秒之間。ConnectionIdleTime則根據(jù)業(yè)務(wù)波峰波谷來(lái)定——如果夜間幾乎沒(méi)有請(qǐng)求設(shè)成 300 到 600 秒可以讓池自動(dòng)收縮釋放數(shù)據(jù)庫(kù)資源。// 連接生命周期與空閑回收的推薦配置 FDConnection1.Params.Values[Pooled] : True; FDConnection1.Params.Values[MinPoolSize] : 5; FDConnection1.Params.Values[MaxPoolSize] : 50; FDConnection1.Params.Values[ConnectionLifeTime] : 3600; // 1小時(shí)強(qiáng)制回收 FDConnection1.Params.Values[MaxIdleTime] : 600; // 10分鐘空閑回收 FDConnection1.Params.Values[CheckConnectionSQL] : SELECT 1; // 取連接時(shí)驗(yàn)證參數(shù)說(shuō)明CheckConnectionSQL是容易被忽略但極其重要的參數(shù)。設(shè)置后FireDAC 在從池中取出連接時(shí)會(huì)先執(zhí)行這條 SQL 驗(yàn)證連接是否仍然有效無(wú)效則丟棄并創(chuàng)建新連接。對(duì)于 MySQL 用SELECT 1Oracle 用SELECT 1 FROM DUALPostgreSQL 同樣用SELECT 1。這個(gè)驗(yàn)證會(huì)帶來(lái)極小的性能開(kāi)銷(xiāo)但能避免大量“連接已斷開(kāi)”的運(yùn)行時(shí)異常。2.3 連接池與其他數(shù)據(jù)訪(fǎng)問(wèn)組件的選型差異在 Delphi 生態(tài)里BDE 已經(jīng)停止更新ADO 依賴(lài) Windows COM 組件無(wú)法跨平臺(tái)dbExpress 雖然輕量但連接池功能薄弱。FireDAC 的優(yōu)勢(shì)在于內(nèi)置了完整的池化管理器且跨平臺(tái)支持 Windows、macOS、Linux、iOS、Android。如果你的項(xiàng)目需要同時(shí)部署到 Windows 服務(wù)器和 Linux 容器FireDAC 是唯一不需要改數(shù)據(jù)訪(fǎng)問(wèn)層代碼的選擇。選型時(shí)還要注意FireDAC 的連接池是進(jìn)程內(nèi)池不是跨進(jìn)程的中間件池。這意味著每個(gè)應(yīng)用實(shí)例獨(dú)立維護(hù)自己的連接池部署多個(gè)實(shí)例時(shí)數(shù)據(jù)庫(kù)的總連接數(shù)等于實(shí)例數(shù)乘以單實(shí)例的MaxPoolSize。這一點(diǎn)在容器化部署時(shí)尤其要算清楚否則數(shù)據(jù)庫(kù)的max_connections會(huì)被瞬間打滿(mǎn)。3. 高并發(fā)核心參數(shù)拆解從 MaxPoolSize 到 Failover 的配置清單參數(shù)配錯(cuò)一個(gè)高并發(fā)下就是連鎖反應(yīng)。這一章把 FireDAC 連接池的參數(shù)分成四組——連接管理、復(fù)用回收、錯(cuò)誤重試、負(fù)載均衡——每組給出推薦值、調(diào)整邏輯和代碼模板。參數(shù)值不是固定的但調(diào)整的方向和邊界是明確的。3.1 連接管理參數(shù)MaxPoolSize 不是越大越好MaxPoolSize的設(shè)置需要同時(shí)考慮三個(gè)約束數(shù)據(jù)庫(kù)服務(wù)器的max_connections、應(yīng)用實(shí)例數(shù)量、單請(qǐng)求持有連接的平均時(shí)長(zhǎng)。一個(gè)實(shí)用的估算公式是MaxPoolSize (數(shù)據(jù)庫(kù)最大連接數(shù) × 0.8) / 應(yīng)用實(shí)例數(shù)。比如 MySQL 的max_connections500部署 4 個(gè)應(yīng)用實(shí)例那么每個(gè)實(shí)例的MaxPoolSize建議不超過(guò) 100。設(shè)成 200 的后果是四個(gè)實(shí)例同時(shí)打滿(mǎn)數(shù)據(jù)庫(kù)直接拒絕新連接所有實(shí)例一起報(bào)錯(cuò)。MinPoolSize的設(shè)置邏輯不同它影響的是冷啟動(dòng)延遲。如果業(yè)務(wù)有明顯的早高峰建議把MinPoolSize設(shè)為日常平均并發(fā)連接數(shù)的 60% 到 80%這樣早高峰來(lái)臨時(shí)不需要大量創(chuàng)建新連接。但MinPoolSize設(shè)得太高低峰期會(huì)浪費(fèi)數(shù)據(jù)庫(kù)資源。一個(gè)折中方案是配合動(dòng)態(tài)調(diào)整策略在檢測(cè)到負(fù)載因子超過(guò) 0.8 時(shí)臨時(shí)提升MaxPoolSize。// 連接管理參數(shù)配置模板 FDConnection1.Params.Values[Pooled] : True; FDConnection1.Params.Values[MinPoolSize] : 10; // 日常平均并發(fā)的60% FDConnection1.Params.Values[MaxPoolSize] : 80; // (500*0.8)/4100留余量 FDConnection1.Params.Values[ConnectionTimeout] : 15; // 獲取連接超時(shí)秒數(shù) FDConnection1.Params.Values[LoginTimeout] : 10; // 登錄超時(shí)秒數(shù)參數(shù)說(shuō)明ConnectionTimeout是從池中獲取連接的超時(shí)時(shí)間超時(shí)后拋出異常。這個(gè)值不宜設(shè)得太小否則高并發(fā)時(shí)大量請(qǐng)求在等待隊(duì)列中就被判超時(shí)也不宜太大否則連接泄漏時(shí)請(qǐng)求會(huì)長(zhǎng)時(shí)間掛起。15 到 30 秒是常見(jiàn)區(qū)間。LoginTimeout是建立物理連接的超時(shí)時(shí)間與ConnectionTimeout不同它只在創(chuàng)建新連接時(shí)生效。3.2 復(fù)用回收與錯(cuò)誤重試RetryConnectCount 的指數(shù)退避ReuseConnections參數(shù)控制是否啟用連接復(fù)用。在 FireDAC 中這個(gè)參數(shù)通常與Pooled配合使用。當(dāng)PooledTrue時(shí)連接復(fù)用是默認(rèn)行為但某些場(chǎng)景下比如需要完全隔離的會(huì)話(huà)狀態(tài)可以顯式關(guān)閉。RetryConnectCount和RetryConnectDelay是錯(cuò)誤處理的關(guān)鍵參數(shù)。網(wǎng)絡(luò)抖動(dòng)或數(shù)據(jù)庫(kù)短暫不可用時(shí)合理的重試策略能讓?xiě)?yīng)用自動(dòng)恢復(fù)而不是直接拋異常給用戶(hù)。重試策略推薦指數(shù)退避第一次重試等待 1 秒第二次 2 秒第三次 4 秒。FireDAC 的RetryConnectDelay是固定間隔如果需要指數(shù)退避需要在OnError事件中自己實(shí)現(xiàn)。下面是一個(gè)結(jié)合了重試和異常處理的配置示例// 錯(cuò)誤重試與異常處理配置 FDConnection1.Params.Values[RetryConnectCount] : 3; FDConnection1.Params.Values[RetryConnectDelay] : 1000; // 基礎(chǔ)間隔1秒 FDConnection1.Params.Values[KeepConnection] : True; // 保持連接活躍 procedure TDataModule1.FDConnection1Error(ASender: TObject; const AInitiator: IFDStanObject; var AException: Exception); begin // 記錄異常上下文便于排查 Logger.Log(Format(連接異常: %s, 錯(cuò)誤碼: %d, [AException.Message, FDConnection1.RowsAffected])); // 如果是連接斷開(kāi)類(lèi)異常標(biāo)記需要重建連接 if Pos(lost connection, LowerCase(AException.Message)) 0 then FNeedReconnect : True; end;邏輯說(shuō)明RetryConnectCount3表示連接失敗后最多重試 3 次。KeepConnectionTrue讓 FireDAC 在連接空閑時(shí)不主動(dòng)斷開(kāi)減少冷啟動(dòng)延遲但要注意數(shù)據(jù)庫(kù)服務(wù)器的會(huì)話(huà)數(shù)限制。OnError事件是捕獲連接異常的入口在這里記錄日志比在全局異常處理中記錄更精準(zhǔn)因?yàn)槟苣玫?FireDAC 內(nèi)部的錯(cuò)誤上下文。3.3 負(fù)載均衡與故障轉(zhuǎn)移Failover 配置的邊界Failover參數(shù)用于配置備用數(shù)據(jù)庫(kù)服務(wù)器主服務(wù)器不可用時(shí)自動(dòng)切換。配置格式是分號(hào)分隔的服務(wù)器列表。但要注意FireDAC 的故障轉(zhuǎn)移是連接級(jí)別的不是事務(wù)級(jí)別的。如果主服務(wù)器在事務(wù)執(zhí)行中途宕機(jī)已經(jīng)執(zhí)行的部分不會(huì)自動(dòng)回滾到備用服務(wù)器需要應(yīng)用層自己處理事務(wù)補(bǔ)償。LoadBalance參數(shù)啟用后FireDAC 會(huì)在多個(gè)服務(wù)器之間輪詢(xún)分配連接。這個(gè)功能適合讀多寫(xiě)少的場(chǎng)景比如報(bào)表查詢(xún)可以分散到多個(gè)只讀副本。但寫(xiě)操作必須指向主庫(kù)所以實(shí)際使用時(shí)通常需要配置兩組連接定義一組啟用LoadBalance用于讀一組不啟用用于寫(xiě)。// 故障轉(zhuǎn)移與負(fù)載均衡配置 FDConnection1.Params.Values[Failover] : Serverdb-backup1;Serverdb-backup2; FDConnection1.Params.Values[LoadBalance] : True; // 動(dòng)態(tài)切換連接定義讀寫(xiě)分離場(chǎng)景 procedure TDataModule1.SwitchToReadOnly; begin FDConnection1.Connected : False; FDConnection1.ConnectionDefName : ReadOnlyPool; // 指向只讀副本組 FDConnection1.Connected : True; end;參數(shù)說(shuō)明Failover的服務(wù)器列表按順序嘗試第一個(gè)可用即使用。LoadBalanceTrue時(shí)FireDAC 會(huì)在ConnectionDefs中注冊(cè)的多個(gè)服務(wù)器之間輪詢(xún)。動(dòng)態(tài)切換連接定義時(shí)必須先Connected : False再改ConnectionDefName否則新定義不會(huì)生效。這個(gè)操作會(huì)觸發(fā)一次連接歸還和重新獲取在高并發(fā)下要避免頻繁切換。3.4 多數(shù)據(jù)庫(kù)配置差異對(duì)照表不同數(shù)據(jù)庫(kù)對(duì)連接池參數(shù)的支持和推薦值差異很大。下面這張表整理了 MySQL、PostgreSQL、Oracle 三種常見(jiàn)數(shù)據(jù)庫(kù)在 FireDAC 下的關(guān)鍵配置差異直接對(duì)照修改即可。參數(shù)MySQLPostgreSQLOracleDriverIDMySQLPGOra推薦 MaxPoolSize30默認(rèn) max_connections1515020連接資源消耗大ConnectionLifeTime3600小于 wait_timeout72003600MaxIdleTime180036001800CheckConnectionSQLSELECT 1SELECT 1SELECT 1 FROM DUAL字符集參數(shù)CharacterSetutf8mb4無(wú)需額外設(shè)置無(wú)需額外設(shè)置特殊注意連接數(shù)不超過(guò) 151支持更多并發(fā)連接每個(gè)連接消耗更多內(nèi)存提示Oracle 的FetchOptions.RowsetSize建議設(shè)為 100 到 200因?yàn)?Oracle 的網(wǎng)絡(luò)往返開(kāi)銷(xiāo)較大批量獲取能顯著減少延遲。MySQL 和 PostgreSQL 可以設(shè)到 500 到 1000。4. 從零配置一個(gè)可用的連接池代碼模板與驗(yàn)證步驟參數(shù)表看完了但真正落到代碼里順序和初始化時(shí)機(jī)同樣關(guān)鍵。這一章給出一個(gè)完整的、可以直接復(fù)制到項(xiàng)目里的連接池配置模板然后說(shuō)明如何驗(yàn)證配置是否生效。4.1 連接定義創(chuàng)建與池參數(shù)注入第一步是在TFDConnection的Params中注入池參數(shù)。注意Pooled參數(shù)必須在Open之前設(shè)置Open之后再改不會(huì)生效。連接定義可以通過(guò)FDManager.ConnectionDefs動(dòng)態(tài)注冊(cè)也可以在設(shè)計(jì)器中預(yù)先配置。動(dòng)態(tài)注冊(cè)的好處是可以在運(yùn)行時(shí)根據(jù)環(huán)境變量切換數(shù)據(jù)庫(kù)地址。procedure TDataModule1.InitConnectionPool; begin // 動(dòng)態(tài)注冊(cè)連接定義 FDManager.ConnectionDefs.AddConnectionDef( OrderDB, MySQL, Server127.0.0.1;Port3306;Databaseorder_db; User_Nameapp_user;Passwordapp_pass; ); // 注入池參數(shù) FDConnection1.ConnectionDefName : OrderDB; FDConnection1.Params.Values[Pooled] : True; FDConnection1.Params.Values[MinPoolSize] : 5; FDConnection1.Params.Values[MaxPoolSize] : 50; FDConnection1.Params.Values[ConnectionLifeTime] : 3600; FDConnection1.Params.Values[MaxIdleTime] : 600; FDConnection1.Params.Values[CheckConnectionSQL] : SELECT 1; FDConnection1.Params.Values[ConnectionTimeout] : 15; // 打開(kāi)連接觸發(fā)池初始化 try FDConnection1.Open; Logger.Log(連接池初始化成功當(dāng)前池大小: IntToStr(FDConnection1.GetPooledConnectionsCount)); except on E: Exception do Logger.Log(連接池初始化失敗: E.Message); end; end;邏輯說(shuō)明AddConnectionDef注冊(cè)了一個(gè)名為OrderDB的連接定義指定了 MySQL 驅(qū)動(dòng)和連接字符串。FDConnection1.ConnectionDefName指向這個(gè)定義后Params中的池參數(shù)會(huì)覆蓋連接定義中的默認(rèn)值。Open調(diào)用觸發(fā)池的初始化此時(shí)MinPoolSize5個(gè)連接會(huì)被預(yù)創(chuàng)建。GetPooledConnectionsCount返回當(dāng)前池中的連接總數(shù)可以用來(lái)驗(yàn)證初始化是否按預(yù)期執(zhí)行。4.2 連接池健康檢查與動(dòng)態(tài)調(diào)整連接池跑起來(lái)之后需要定期做健康檢查并在負(fù)載變化時(shí)動(dòng)態(tài)調(diào)整池大小。健康檢查的邏輯是遍歷池中所有連接對(duì)每個(gè)連接執(zhí)行CheckConnectionSQL失敗的連接標(biāo)記為無(wú)效并重置。動(dòng)態(tài)調(diào)整則根據(jù)當(dāng)前活躍連接數(shù)與MaxPoolSize的比值來(lái)決定是否擴(kuò)容或縮容。procedure TDataModule1.HealthCheckAndAdjust; var ActiveCount, MaxCount: Integer; LoadFactor: Double; begin ActiveCount : FDConnection1.GetPooledConnectionsCount; MaxCount : StrToInt(FDConnection1.Params.Values[MaxPoolSize]); LoadFactor : ActiveCount / MaxCount; // 負(fù)載超過(guò)80%擴(kuò)容 if LoadFactor 0.8 then begin MaxCount : MaxCount 10; FDConnection1.Params.Values[MaxPoolSize] : IntToStr(MaxCount); Logger.Log(連接池?cái)U(kuò)容至: IntToStr(MaxCount)); end // 負(fù)載低于30%且池大小超過(guò)最小值10縮容 else if (LoadFactor 0.3) and (MaxCount 20) then begin MaxCount : MaxCount - 5; FDConnection1.Params.Values[MaxPoolSize] : IntToStr(MaxCount); Logger.Log(連接池縮容至: IntToStr(MaxCount)); end; // 驗(yàn)證所有連接的健康狀態(tài) FDConnection1.ExecSQL(SELECT 1); end;參數(shù)說(shuō)明GetPooledConnectionsCount返回的是池中當(dāng)前連接總數(shù)包括空閑和使用中的。負(fù)載因子用這個(gè)值除以MaxPoolSize來(lái)估算。擴(kuò)容步長(zhǎng)設(shè)為 10縮容步長(zhǎng)設(shè)為 5避免頻繁調(diào)整導(dǎo)致抖動(dòng)。縮容的下限是MinPoolSize 10防止把池縮到太小導(dǎo)致后續(xù)請(qǐng)求等待。健康檢查用ExecSQL(SELECT 1)是最輕量的方式但只驗(yàn)證了當(dāng)前連接要驗(yàn)證所有連接需要遍歷池對(duì)象。4.3 配置生效的驗(yàn)證方法配完參數(shù)后怎么確認(rèn)池真的在工作三個(gè)驗(yàn)證點(diǎn)第一啟動(dòng)后立即查看GetPooledConnectionsCount應(yīng)該等于MinPoolSize第二并發(fā)執(zhí)行 100 個(gè)查詢(xún)觀察池大小是否增長(zhǎng)到接近MaxPoolSize后不再增長(zhǎng)第三手動(dòng)關(guān)閉一個(gè)連接后池大小應(yīng)該減少再次請(qǐng)求時(shí)重新增長(zhǎng)。如果池大小始終等于MinPoolSize不變化說(shuō)明Pooled參數(shù)沒(méi)生效檢查是否在Open之前設(shè)置。// 驗(yàn)證連接池是否生效的測(cè)試代碼 procedure TDataModule1.VerifyPoolBehavior; var I: Integer; InitialCount, AfterLoadCount: Integer; begin InitialCount : FDConnection1.GetPooledConnectionsCount; Logger.Log(初始池大小: IntToStr(InitialCount)); // 模擬并發(fā)請(qǐng)求 for I : 1 to 100 do begin FDConnection1.Open; try FDConnection1.ExecSQL(SELECT 1); finally FDConnection1.Close; end; end; AfterLoadCount : FDConnection1.GetPooledConnectionsCount; Logger.Log(負(fù)載后池大小: IntToStr(AfterLoadCount)); if AfterLoadCount InitialCount then Logger.Log(連接池工作正常已按需擴(kuò)展) else Logger.Log(警告連接池可能未生效檢查 Pooled 參數(shù)); end;邏輯說(shuō)明這段代碼先記錄初始池大小然后循環(huán) 100 次執(zhí)行“獲取連接-執(zhí)行查詢(xún)-歸還連接”的操作。如果池正常工作AfterLoadCount應(yīng)該大于InitialCount因?yàn)槌貢?huì)保留已創(chuàng)建的連接以備復(fù)用。如果兩者相等說(shuō)明每次都在創(chuàng)建新連接并立即銷(xiāo)毀Pooled參數(shù)可能沒(méi)有正確設(shè)置。5. 避坑與排查連接池耗盡、泄漏、死鎖的現(xiàn)場(chǎng)處理參數(shù)配好了代碼也寫(xiě)了但生產(chǎn)環(huán)境的問(wèn)題往往不按手冊(cè)出牌。這一章整理了四個(gè)最常見(jiàn)的連接池故障場(chǎng)景每個(gè)都按“現(xiàn)象 → 原因 → 解決”的結(jié)構(gòu)給出排查路徑。這些坑我都在項(xiàng)目里踩過(guò)有些是配置問(wèn)題有些是代碼習(xí)慣問(wèn)題。5.1 連接池耗盡Too many connections 的連鎖反應(yīng)現(xiàn)象應(yīng)用日志出現(xiàn)[FireDAC][Phys][MySQL] Too many connections所有數(shù)據(jù)庫(kù)操作超時(shí)重啟應(yīng)用后短暫恢復(fù)幾分鐘后再次出現(xiàn)。原因三種可能。一是MaxPoolSize設(shè)得太大多個(gè)應(yīng)用實(shí)例同時(shí)打滿(mǎn)數(shù)據(jù)庫(kù)的max_connections二是連接泄漏某個(gè)代碼路徑Open后沒(méi)有Close連接被永久占用三是數(shù)據(jù)庫(kù)服務(wù)器的wait_timeout小于ConnectionLifeTime連接被服務(wù)器斷開(kāi)后客戶(hù)端不知道仍然認(rèn)為連接可用。解決先查數(shù)據(jù)庫(kù)的SHOW PROCESSLIST看連接來(lái)自哪些應(yīng)用實(shí)例確認(rèn)是單實(shí)例問(wèn)題還是全局問(wèn)題。如果是全局問(wèn)題降低每個(gè)實(shí)例的MaxPoolSize公式是(max_connections × 0.8) / 實(shí)例數(shù)。如果是單實(shí)例問(wèn)題檢查代碼中所有FDConnection.Open是否都有對(duì)應(yīng)的Close推薦用try...finally包裹。如果是超時(shí)不一致問(wèn)題把ConnectionLifeTime設(shè)為小于wait_timeout的值并啟用CheckConnectionSQL。5.2 連接泄漏連接數(shù)只增不減的隱形殺手現(xiàn)象應(yīng)用運(yùn)行一段時(shí)間后池中連接數(shù)持續(xù)增長(zhǎng)最終達(dá)到MaxPoolSize后新請(qǐng)求全部超時(shí)。重啟后恢復(fù)但再次緩慢增長(zhǎng)。原因連接泄漏幾乎總是代碼問(wèn)題。最常見(jiàn)的三種在except塊中忘記Close在循環(huán)中Open了連接但只在循環(huán)外Close一次使用TFDQuery時(shí)沒(méi)有設(shè)置Connection屬性導(dǎo)致每次查詢(xún)都創(chuàng)建新連接。解決用 FireDAC 的OnConnectionStateChange事件監(jiān)控連接狀態(tài)變化記錄每次Open和Close的調(diào)用棧。更直接的方法是在代碼審查中強(qiáng)制要求所有Open必須出現(xiàn)在try塊的第一行Close出現(xiàn)在finally塊的第一行。下面是一個(gè)防泄漏的代碼模板// 防連接泄漏的標(biāo)準(zhǔn)寫(xiě)法 procedure TDataModule1.SafeQuery; begin FDConnection1.Open; try FDQuery1.Connection : FDConnection1; // 必須顯式指定 try FDQuery1.SQL.Text : SELECT COUNT(*) FROM orders; FDQuery1.Open; // 處理結(jié)果 finally FDQuery1.Close; end; finally FDConnection1.Close; // 確保任何異常下都會(huì)歸還連接 end; end;5.3 高并發(fā)死鎖連接池與事務(wù)的交叉等待現(xiàn)象高并發(fā)下部分請(qǐng)求卡死數(shù)據(jù)庫(kù)端出現(xiàn)死鎖告警應(yīng)用日志顯示事務(wù)等待超時(shí)。原因連接池中的連接被事務(wù)長(zhǎng)時(shí)間持有其他請(qǐng)求等待連接釋放而持有連接的請(qǐng)求又在等待數(shù)據(jù)庫(kù)鎖釋放形成交叉等待。典型場(chǎng)景是事務(wù) A 持有連接 1 并等待行鎖事務(wù) B 持有行鎖并等待連接 2而連接 2 被事務(wù) A 占用。解決縮短事務(wù)持有連接的時(shí)間。具體做法事務(wù)中只包含必要的 SQL 操作不要在事務(wù)中做網(wǎng)絡(luò)調(diào)用或文件 IO設(shè)置CommandTimeout限制單條 SQL 的執(zhí)行時(shí)間對(duì)于批量操作分批提交而不是一個(gè)大事務(wù)包到底。FireDAC 的Transaction對(duì)象支持StartTransaction和Commit確保每個(gè)事務(wù)都有明確的邊界。5.4 連接超時(shí)ConnectionTimeout 與網(wǎng)絡(luò)抖動(dòng)的博弈現(xiàn)象偶發(fā)性連接超時(shí)日志顯示ConnectionTimeout expired但數(shù)據(jù)庫(kù)服務(wù)器負(fù)載正常。原因ConnectionTimeout設(shè)得太小高并發(fā)時(shí)請(qǐng)求在池的等待隊(duì)列中排隊(duì)還沒(méi)輪到就被判超時(shí)。或者網(wǎng)絡(luò)存在間歇性抖動(dòng)物理連接建立時(shí)間超過(guò)LoginTimeout。解決把ConnectionTimeout從默認(rèn)的 10 秒調(diào)整到 15 到 30 秒給等待隊(duì)列留出緩沖。同時(shí)啟用RetryConnectCount讓超時(shí)后的請(qǐng)求自動(dòng)重試。如果是網(wǎng)絡(luò)抖動(dòng)問(wèn)題檢查應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器之間的網(wǎng)絡(luò)質(zhì)量必要時(shí)增加LoginTimeout到 15 秒。注意ConnectionTimeout和LoginTimeout是兩個(gè)不同的參數(shù)前者管獲取連接后者管建立物理連接。注意排查連接超時(shí)問(wèn)題時(shí)先看數(shù)據(jù)庫(kù)服務(wù)器的Threads_connected和Threads_running如果這兩個(gè)值遠(yuǎn)低于max_connections說(shuō)明瓶頸在應(yīng)用側(cè)的池配置而不是數(shù)據(jù)庫(kù)。6. 進(jìn)階用事件監(jiān)控和日志把連接池變成白盒連接池配好之后最怕的是出問(wèn)題時(shí)看不到內(nèi)部狀態(tài)。FireDAC 提供了一組事件接口可以在連接獲取、歸還、創(chuàng)建、銷(xiāo)毀時(shí)觸發(fā)回調(diào)把這些事件接到日志系統(tǒng)里連接池就從黑匣子變成了白盒。這一章給出一個(gè)基于事件的監(jiān)控實(shí)現(xiàn)以及如何把監(jiān)控?cái)?shù)據(jù)輸出到日志和告警系統(tǒng)。6.1 用 OnConnectionStateChange 追蹤連接流轉(zhuǎn)TFDConnection的OnConnectionStateChange事件在連接狀態(tài)變化時(shí)觸發(fā)可以拿到當(dāng)前是獲取還是歸還、連接是否有效。把這個(gè)事件接到日志里每次連接流轉(zhuǎn)都有記錄排查泄漏時(shí)直接看日志就能定位到哪次Open沒(méi)有對(duì)應(yīng)的Close。procedure TDataModule1.FDConnection1StateChange(Sender: TObject); var StateStr: string; begin case FDConnection1.State of csInactive: StateStr : 未連接; csOpening: StateStr : 正在打開(kāi); csOpen: StateStr : 已連接; csClosing: StateStr : 正在關(guān)閉; csClosed: StateStr : 已關(guān)閉; end; Logger.Log(Format([連接池] 狀態(tài)變化: %s, 池大小: %d, 時(shí)間: %s, [StateStr, FDConnection1.GetPooledConnectionsCount, FormatDateTime(yyyy-mm-dd hh:nn:ss.zzz, Now)])); end;邏輯說(shuō)明OnConnectionStateChange在Open和Close時(shí)都會(huì)觸發(fā)通過(guò)State屬性區(qū)分當(dāng)前狀態(tài)。日志中記錄池大小和時(shí)間戳如果發(fā)現(xiàn)池大小持續(xù)增長(zhǎng)而狀態(tài)在csOpen和csClosed之間頻繁切換說(shuō)明連接創(chuàng)建和銷(xiāo)毀的頻率過(guò)高可能需要調(diào)大MinPoolSize。如果池大小只增不減說(shuō)明存在泄漏。6.2 自定義監(jiān)控指標(biāo)與告警閾值除了日志還可以把連接池的關(guān)鍵指標(biāo)暴露給外部監(jiān)控系統(tǒng)。FireDAC 沒(méi)有內(nèi)置的 Prometheus 接口但可以通過(guò)定時(shí)采樣把指標(biāo)寫(xiě)入日志文件再由日志采集器轉(zhuǎn)發(fā)。關(guān)鍵指標(biāo)包括當(dāng)前池大小、活躍連接數(shù)、等待隊(duì)列長(zhǎng)度、連接創(chuàng)建速率、連接銷(xiāo)毀速率。指標(biāo)采集方式告警閾值含義池大小GetPooledConnectionsCount持續(xù)等于 MaxPoolSize 超過(guò) 5 分鐘池已打滿(mǎn)請(qǐng)求在排隊(duì)活躍連接數(shù)池大小 - 空閑連接數(shù)超過(guò) MaxPoolSize 的 90%接近容量上限連接創(chuàng)建速率單位時(shí)間內(nèi) Open 次數(shù)超過(guò) 10 次/秒池太小或泄漏連接銷(xiāo)毀速率單位時(shí)間內(nèi) Close 次數(shù)與創(chuàng)建速率嚴(yán)重不匹配可能存在泄漏等待超時(shí)次數(shù)ConnectionTimeout 異常計(jì)數(shù)超過(guò) 5 次/分鐘池容量不足或泄漏采集這些指標(biāo)的方式是在OnConnectionStateChange中累加計(jì)數(shù)器然后每分鐘輸出一次匯總?cè)罩?。告警閾值可以根?jù)實(shí)際業(yè)務(wù)調(diào)整但“池大小持續(xù)等于 MaxPoolSize”是最關(guān)鍵的信號(hào)出現(xiàn)這個(gè)信號(hào)說(shuō)明池已經(jīng)不夠用了。6.3 一個(gè)具體的調(diào)優(yōu)習(xí)慣從那以后我每次上線(xiàn)新的 Delphi 服務(wù)都會(huì)強(qiáng)制走一遍連接池壓測(cè)用 200 個(gè)并發(fā)線(xiàn)程跑 10 分鐘觀察池大小的變化曲線(xiàn)。如果曲線(xiàn)在 5 分鐘內(nèi)就沖到MaxPoolSize并保持水平說(shuō)明池太小或者有泄漏如果曲線(xiàn)在MinPoolSize和MaxPoolSize之間平穩(wěn)波動(dòng)說(shuō)明配置合理。壓測(cè)時(shí)還會(huì)故意殺掉一個(gè)數(shù)據(jù)庫(kù)連接驗(yàn)證CheckConnectionSQL是否能自動(dòng)剔除死連接。這個(gè)習(xí)慣幫我提前發(fā)現(xiàn)了至少三次潛在的連接泄漏比等到生產(chǎn)環(huán)境告警再排查省了太多時(shí)間。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月婷婷AV| 久久精品国产久精国产| 久久久禁| AV和黑人在线播放| 欧美日本天堂| 亚洲中文字幕久久人妻| 色妇91| 超碰av人人人| 思思热久久成人| 操死我了啊啊啊| 懂色av色欲av蜜臀av| 亚洲精品欧洲色| 久久欧美按摩999| 无码人妻1727| 亚洲污污网站| 撸撸成人在线视频| 国产农村妇女精品1区二区| 日本一区二区亚洲综合| 国产精品视频电影| 国产这里只有精品| 91在线综合网| av无线看| 久久久精品中文字幕爱豆| 91美乳| 95人妻爽爽人人做人人澡| 熟女91网| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 精品女人999| 午夜啊啊| 国产高清不卡视频| 免费看A片毛毛片在线播| 国内成人圈中文字幕无码视频| 97超碰碰碰| 青青免费在线视频一区| 天美传媒AV在线| JULIA人妻风俗店中出电影| 国产亚洲色婷婷久久99精品91葵花宝典 | 蜜桃午夜视频一区二区 | 亚洲中文一区二区三区视频| 中文字幕在线观看网址| 亚洲色香| 久久久久久91香蕉国产| 人人噜夜夜操| 91精品婷婷国产综合久久竹菊| 久久激情网| 狠狠婷婷亚洲中文综合久久| 亚洲大色鬼| 欧美激情亚洲色图| 日韩欧美女优电影| 神马久久久久久久久久| 国内精品不卡无毒99999| 九九热最新| 午夜福利成人免费视频| a在线视频免费观看| 大香蕉免费3| 青青草中文字幕| 婷婷色综合欧美日韩| 欧亚日本情色| 91性片| 亚欧洲一区二区视频| 亚洲综合九| 91/欧美| 国产久9| 99999精品| 国产视频97| 超碰97人妻自拍| 日韩综合97P| 精品九九九九九九九九九| 使劲用力艹少妇视频一区二区| 女人的天堂大香蕉网| 亚洲综合另类色图| 秋霞一级鲁丝片A片| 成人精品久久| 91av一区二区在线观看| 国产高清MV操逼视频| 国产拍偷精品网站| 日韩欧美综合激情| 久久精品店| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 九月伊人中文字幕| 欧美性巨大╳╳╳╳╳高跟鞋| 午夜免费福利视频一区| 国产白嫩精品久久| 久久久性爱视频| 久热99999| 精品日韩人妻视频| 国产无马av| 中文字幕视频2区| 欧美色图 人妻| 啊啊啊操死我了| 好爽免费视频| 国产精品久久久啊| 精品国产www久久| 久久99热这里只频精品6学生| 亚洲精品男人的天堂| 免费看美国人人爽,人人操| 久久国产三区| 国产精品夜夜| 1769精品一区二区三区| 麻豆久久久久久久久丝袜| 亚洲的天堂网| 色九久| 日韩欧美aⅴ综合网站发布| 老熟女乱子伦中文字幕一区二区| 亚洲区限制级| 久久精品无码熟妇一区二区三区视频导航 | 亚洲 另类 丝袜 自拍 动漫| 欧美一级在线观看成人| 五月婷婷六月色| 中文字幕精品亚洲熟女| 国产精品一区二区三区,亚洲综合| 久操大香蕉手机视频在线看| 少妇三P| 亚洲丝袜综合| 麻豆2区1区天美| 欧美综合色,www| 91天天综合日韩欧美| 国产精品久久久久久久黄无码 | 亚洲天天操| 色婷婷五月综合激情中文字幕| 天天操天天日天天干| 88在线一区二区三区| 欧美日韩*字幕一区| 天天做天天爱| 加勒比综合在线| 手机在线观看不卡无码av| 狠狠 91| 97K超碰在线| 操我无码| 夜夜国自区| 无码国产精品96久久久久孕妇| 狠狠激情综合狠狠操中文字幕| 久久大陆| 精品国产久热在线观看| 国产福利小视频高清在线观看| 诱惑人妻欧美一区在线播放| 欧美老妇女内射网址| 91在线免费精品视频| 久久精精区一区二区一蜜桃一区二区| 欧美综合亚洲综合| 日本天天吊| 秋霞午夜视频一区二区| 黄片qw| 国产麻豆91欧美一区二区久久婷婷国产精品| 我爱大香蕉| 亚洲日韩在线a不卡99精品| 中文字幕成人| 一区二区乱码福利| 色爽——AV| 天堂中文日本在线观看| 偷拍亚洲视频一区二区三区四区| 熟女乱伦二区| 少妇综合网| 老熟妇综合| 亚洲第一在线视频| 精品国产无码中文| 91女优在线观看 | 午夜超爽| 日天天九九天堂666| 国产少妇肉丝在线观看| 岛国在线国产| 五十路成人在线视频二区三区| 91在线无码精品秘 软件| 果冻传媒A片麻豆熟妇人妻| 欧美熟女少妇| 国产亚洲精品农村妇女| 人妻第一页| 久草久热| 中文字幕日韩国产传媒欧美精品| 美女黄频a美女大全免费皮| 亚洲欧洲日韩中文字幕一区| 日本精品人妻少妇一区二区| 不卡免费av在线播放| 天天噜| 日韩欧美女求操每天更新| 综合网亚洲| 超碰久久草| 狠狠综合网| 中文字幕日韩人妻视频| 精品人妻久久久久一区二区三区| 干b在线性社区| 国产精品亚洲一级av第二区| 亚洲AV不卡在线观看尤物| 亚洲中文字母在线播放| 欧美性爱精品七区| 九九热视频这里只有精品| 顶级丝袜熟女一区二区三区 | 日韩精品中文字幕人妻| 97超碰公开| 精品176精品2| 狠狠热这里都是精品| 亚洲精品 大香蕉| 欧州一区二区三区四区| 91第一页| 五月天久久人妻| 啊啊啊啊啊好舒服视频| 伦理日韩国产久久| 秋霞午夜视频一区二区| 久久香蕉超碰97国产精品| 亚洲综合五月天| 黄色大香焦1级‘′‘| 色黄污美女啪啪啪免费网站| 久久免费99精品久久久久久| 26UUU欧美日本| 亚洲小说视频| 日本大香蕉综合网红本杳社区| 97超碰超欧美。| 欧美在线伊人色| 欧美 亚洲 第一页 | 东北老女人的激情视频| 国产精品情侣啪啪| 欧美激情超碰777| 天天肏美女| 一二三区在线| av亚洲天堂资源网站| 亚洲欧美一区二区三区在钱蜜桃 | 亚洲欧美国产精品久久久久久久| 加勒比综合a∨| 欧美日动态视频| 97国产天堂岛| 欧美性天天影院| 国产精品色| 天天综合站| 天天综合站| 亚洲少妇综合| 黄骗免费网站| 国产亚洲精品美女久久久久久2021| 岛国片在线播放| 无码 黑人一区二区三区| 亚欧成人中文字幕一区| 综合激情五月丁香| 草b在线| 久久神马影院| 屁股久久久久久| 亚洲视频中文一区| 天天草夜夜草高潮片| 亚洲最大成人a毛毛片| 女人喷水视频在线观看| 婷婷激情啪啪| 欧美 日韩 另类 亚洲| 国产综合久久久鬼色| 超碰这里只有精品| 91第一页| 精品人妻美妇91job| 色九月婷婷| 高潮毛片无遮挡高清免费| 日本视频一区二区三区| 熟妇熟女视频一区二区三区| 97在线欧洲| 亚洲丰满很很操| 亚洲成成熟女人综合一区二区| 91综合网| 九九色逼| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 69人妻精品一区二区绯色| 欧美色图私拍91| 另类专区加勒比| 99热| 亚洲丁香花色| 国产性爱欧美性爱在线| 一级片视频啪啪| 秋霞曰韩R级| 蜜桃在线观看一区二区三区 | 免费久久一级毛片大黄| 麻豆这里只有精品| 亚洲天堂第一页| 骚鸭AV| 秋霞一级A片黄色视频| 操逼操网| 久九9精品| 肏逼视频日本| 男人兔费天堂| 深夜激情| 午夜欧美女人操逼| 国厂麻豆77q4| 国产欧美在线观看免费观看| 亚州少妇| 91成人无码| 精品人人插人人操| 超碰久久精品| 26uuu国产成人综合| 神马久久网| 一区在线精品中文字幕| 婷婷99狠狠| 国产精品粉嫩福利在线| 天天插夜夜操| 色www精品视频在线观看| 凹凸视频在线一区二区| 日韩草久视频| 99久久久无码国产精品性啊聊| 91狼人| 嗯嗯啊啊的视频| 国产一区二区三区视频在线看| 性爱动态120秒| 国产99热| 91在线色| 国内毛片国产专区二| 久久蜜色情在线视频xxx免费观看| 中国操逼无码| 日韩精品9999| 久久肏大逼| 亚洲AV在线资源| 91人妻Pr| sewuyueav| 五月天色色色| 精品九九| 伊人色综合超碰| 欧美日韩在线视频网站| 伊人色综合超碰| 午夜.DJ高清在线观看免费7| 免费网色网站| 午夜久久无码1000合集| 大香蕉人妻久久| 中文字幕高清20页视频| 一区操逼| 大干人妻| 香蕉一区二区三区在线视频| 国产网红精品| 成人三级片一区二区三区视频| 91久久久久免| 亚洲国产麻豆一区二区三区| 精品78| 九一精品牛牛一区二区| 欧美性爱视频免费一区一A | 男人天堂.AB| 国产精品点击进入在线影院| 蜜臀th| 婷婷丁香在线| 三男一女不戴套的A片| 97频视在线| 99热在线观看| 日韩在线国产字幕| 加勒比久久av| 91逼逼女人91| 最近2019中文字幕国语免费版| 久久9免费视频| 色av中文字| 2019天天干天天操| 翔田千里A片一区二区| 老鸭窝黄色视频网站| 色狠狠综合| 国产91亚洲精品一区二区三区| 天天射夜夜| 久久国产视频性吧| 亚州操逼图| 白丝一区| 快播久久人人aV| 久久精品72| 夜色五月天| 国产专区第一页| 九七色图| 亚洲有薄码区久久在线一区| 国产人妻一区二区三区欧美毛片| 爽爽歪在线视频| 色综合av男人天堂| 美国一区二区三区视频| 神马久久久久久久| 另类欧美综合| 嗯嗯嗯啊啊在线观看| 美女大乳久久久久久久女人18| 大香蕉久久| 中文字幕精品一区二区精| 超碰97COm中文| 亚洲九九视频在线观看| 97干天天| 日本一区二区三区精品| 91黑丝露脚| 国产欧美日韩精品中文| 国产成人精品日本视频| 亚洲成人日韩小说| 成人无遮挡毛片免费看| 欲香欲色| 美女天天干| 男人天堂2017| 超碰97色| 97在线视频观看| 欧成人精品一区二区三区| 国产成人精品午夜福利| 玖玖爱一区在线| 大香蕉中文aV在线| 操操操操操操| 制服丝袜第二页| 久偷拍欧美日韩三区| 操九九九九九九| 999久久久免费精品国产牛牛| 青娱乐淫乱1314| 欧美综合色站| 另类 日韩 熟女| 日韩美女操b| 五月丁香六月婷| 日韩av影片在线观看| 亚洲欧美综合区自拍另类 | 99热在线观看| 红杏大香蕉| 亚洲综合网电影91| 中文字幕55555| 欧美色图中文字幕| 九九黄色视频在线观看| 伊人久久婷婷| 久悠悠av| 亚州中文字幕超碰97| 亚洲精品欧美专业| 在线观看视频91| 丝袜色综合| 大香交| 综合网亚洲在线| 亚洲欧美97| 久久专区| 91午夜无码| 性爱av在线免费观看| 依人大香蕉| 人人色人人射人人妻| 99热aaa| 日韩中文9| 久热这里只有精品9| 亚洲天天综合| 秋霞久久亚洲精品成人| 国产原创剧情在线丝袜| 中文字幕国产精品1区| 美女91在线观看| 久久久久婷婷精品av电影| 欧美性第1页| 91天天看| 我要看免费韩日黄片| 亚洲日产专区| 伊人在线大香蕉视频久久| 亚州综| 男女性感激情网站| 九九色综合| 伊人青青草久久| 99热在线只有精品| 国产精品熟女九色九色蜜臀| 日韩精品一区的| 精爱久久| 超碰人妻97| 国产成人一级av88| 大香蕉天天看妹子| 欧美激情内射| 最新啪啪视频| 欧洲亚洲人妻无码中字久久三区四区| 男人天堂无码| 午夜.DJ高清在线观看免费7| 丁香五月成人| 手机av亚洲丝袜美腿日韩第一页二页| 91bbb| 亚洲砖码砖专无区2023| 美腿丝袜高跟网免费视频免费视频| 蜜臀va69| 亚洲码专区| 区二区亚洲婷| 岛国1区2区3区在线观看| 日亚韩精品视频二区三| 最新av在线| 精品欧美不卡在线播放| 99色综合| 中出欧美| 九九热精品视频在线观看| 天天摸天天舔天天操| 毛片一区二区| 国产伦精品免编号公布| 久久99九九九九6666免费观看软件| 18禁网站在线播放| 久久香蕉超碰97国产精品| 国产精品视频内谢女人| 丁香五月激情网| 亚洲精品九九九九九九| www成人啪啪18秘 免费| 欧美色图在线视频少妇| 人妻人人做人人澡人人爽欧美一区| 国产精品经典一卡久久久| 天天干18禁| 久久婷婷五月天| 妇女乱色二区| 99色在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 欧美性巨大╳╳╳╳╳高跟鞋| 91精品成人| 国产精品无码成人精品| 3P乱轮视频| 久久黄色性爱视频| 99这里有精品| 亚洲欧美日韩偷拍色图| 有码免费观看| 尹人免费观看视频在线| 蜜臀99999| 亚洲αv一区二区三区| 91欧洲国产成人久久精品网站| 国产精品人妻无码久久久互動交流| 欧美婷婷| 精品人妻视频入口| 亚洲第一页欧美| 人人看人人爰人人操| 性性久久| 99色婷婷| 国产品精品自在在线午夜免费| 精品人妻二区三区| 在线岛| 亚欧操逼片在线观看| 大香蕉黄色一区| 麻豆成人AV| 久久av色| 五月天婷婷基地| 又大又大又大又粗爽高潮观看| 欧美一级欧美三级在线观看| 亚洲天堂7777| 欧美懂色综合网| 91日日| 精品在线观看视频在线| 欧美 亚洲| 色九九九综合| 六九九九| 91三级理论片播放器| 超碰诱惑| 免费看污网址| www.91色综合| 无码高清专| 亚洲色宗合| 免费97视频| 天无日色综合| 手机在线看片免费人成视频| 中文字幕国产在线天堂| 91亚.色| 麻豆影音天美视频| 五月婷婷六月天| 日韩操逼HD| 国产剧情在线| 亚洲图片视频小说| 60秒免费小视频| 亚洲天堂中文字幕无码男同| 欧美人妻一区| 偷拍三区| 久久久久久久强迫| 91人人| 99在线精品观看视频中文| 天天摸天天碰天天添青青| 久久婷婷色| 夜嗨影院| 久久亚洲欧美中文字幕国语| 人妻少妇久久中文字幕一区二区 麻豆| 中文字幕欧美日本乱码一线二线| 超碰在线974| 日本精品一区三区| 啪啪啪综合网| 久久婷婷伊人| 亚洲成av人片色午夜乱码| 精品午夜福利国产一区二区在线观看| 国产精品美女久久久久久网站| 亚洲欧美洲综合| 大香蕉伊然在亚洲91| 四虎免费看黄| 色欲人妻一区二区在线| 狠肏骚人妻| 不卡超碰护士AV在线免费播放| 另类视频在线| 婷婷五月色| 婷婷丁香五月综合| 99综合| 丁香九月激情| 久久久久免费少妇| 九色 人妻 大香蕉| 天美传媒国产原创中文字幕亚洲欧美另类 | 天天日天天搞天天干| 四虎国产精品永久在线囯在线| 人妻少妇精品久久久久久久| 91九色丨风韵犹存| 91人妻少妇| 超碰在线人人射| 一起草三级AV电影在线观看| 成年人网站在线免费观看| 国产成人亚洲精品无| 久久老女人| 精品视频在线观看精品| 91AV入口| 国产精品无套内谢| 国产情侣自拍在线播放| 97人人超| 嗯嗯啊啊操死我| 欧亚第一综合网| 久草草一二三四区久久| 中文字幕无码不卡啪啪| 狠狠入| 2024黄色视频| 370p日韩欧美亚洲精品| 国产尤物AV尤物在线观看不卡| 精品成人av一区二区三区在线| 五月丁香影视| 国产传媒1234区| 天天操天天谢| 欧美 亚洲 第一页| 亚洲97成人在线观看| 亚洲va有码在线天堂| 强奸a片网| 综合网,亚洲,欧美| 丝袜美腿射精91| 久夜操| 国产精品久久天天干| 日韩av在线免费网站| 国产玖玖| 99精品久久久久久| 97天堂| 亚洲最大成人a毛毛片| 狠狠狠狠狠干| 欧美精品久久| 91内射| 黄片不用下载在线观看| 嗯嗯,啊啊,国产精品| 青青草久久| a片自拍直播视频| 黄片不用下载在线观看| 99国产精品免费| 欧美亚洲丝袜人妻制服中文99| 人人贴人人摸| 91精品电影18| 97ai亚洲| 精品偷拍13p欧美dodk视频| 日本天天干天天搞一区| 少妇高潮喷水无套久久久久久| 久久久久成人网| 九九综合久久中文字幕| 欧美极品女人的天堂| 九一性生活免费视频| 亚洲色综合| 色色色色综合网| 操死我了嗯嗯嗯| 操一操摸一摸| 亚洲天堂,男人| 色爽——AV| 97超碰站| 九九热精品| 四虎免费视频| 欧美性爱www免费版| 久久精品一区| 超碰色综合| 六月丁香婷| 精品久久久一本一道| 亚洲成人性| 禁十八久久| 20cm女自慰在线日韩欧美| 五月天激情国产综合婷婷婷| 亚洲好色人妻| 日本三级R| 久久精品99| 一级久久性爱视频| 久草老司机| 天天日天天干天天整| 亚洲色图伊人网| 懂色av色欲av蜜臀av| 欧美A√综合网| 日本性爰一道本| 伊人网在线视频| 影音先锋视频在线| 亚洲日韩久久精品一区| 日韩欧美中文日韩欧美色| 天天摸夜夜操视频| 丝袜美腿制服人妻二区中文字幕 | 91 欧美| 久操B网| 青娱乐国产剧情av一区| 国产精品对白内射| 亚洲AV无码乱码| 色五月天AV| 一区二区三区黄色片a| 欧美日韩人妻婷婷一区| 夜色AV无码手机在线影院| 极品一区二区三区免费| 日本理论在线| 五十路三区在线| 嗯嗯嗯啊啊啊操的我好爽| 亚洲日韩视频二区| av线电影| 午夜大香蕉| 神马久久久久久| 美腿丝袜偷拍亚洲欧美| 国产精品无码av在线| 夜夜嗨一区二区三区三州加勒比| 91啪啪| 老司机午夜精品视频| 9久久美女首页| 大伊香蕉在线视频免费| 深夜国产福利| 欧美日韩大陆黑人少妇99| 玖玖玖玖精品国产剧情| 欧洲人妻视频| 色 亚洲 91| 国产亚洲国产超碰| 亚洲 欧美 日韩 国产一区二区| 欧美夜夜骑视频| 成人看片网站| 一区不卡在线观看av| 国产精品一二三| 欧美最婬乱婬爆婬性视频| 伊人久久综合影院| 中文三一区| 欧美久久婷婷| 国产av尤物| 浪人综合网| 一区二区三| 东方亚洲在线操逼天堂| 啊啊啊啊啊啊啊国| 欧美自拍偷拍免费观看| aaa亚无码专区| 亚洲在线A| 99精品网站| 久久,精品一二三| 亚洲日韩美国人妻| 污色区网站| 国产激情在线| 九九九九免费视频| 大香蕉99热| 日本熟妇一区二区三区| 亚洲无码一二三区| AⅤ片水多多| 亚洲色交| 一本大道青青| 超碰久草| 中文字幕伊人| baiduhicn.com。| 黄页18禁| 亚洲精品视频二区| 久久色情| 熟女人妻一区二区三区| 午夜超爽| 国产无码精品高清| 黄色免费一级在线毛片| 97色在线视频| 噜噜噜噜久久久精品免费| 97丝袜亚洲在线播放| 熟妇视频一区二区三区在线观看| 丁香五月综合| 3p国产色噜噜一区| 久久久久久久亚洲Av无码| 亚洲av夫妻操穴网| av网站在线观看了| 久久这里只精品| 日本97久久| 加勒比av网| 日日干夜夜骑| 中文日韩欧美熟| 老熟女中文字幕高清| 极品粉嫩少妇视频| 激情终合网| 黄呦呦在线| 亚洲成人色情五月天丁香花| 欧美美女在线高潮999| 亚殴在线| 久久免费看高潮毛片韩国| 亚洲最大黄网| 美女的肌被草喷水视频| 99啪啪| 高清肉丝中文无码| 乱码人妻一区二区三区| 91精品久久久久久久久久| 欧美在线色| 亚洲情色综合网| 深夜激情| 91天天综合日韩欧美| 亚洲黑人在线| 中字幕人妻一区二区三区| 秋霞成人一级在线观看| 精品成人动漫一区二区| 亚洲av淫乱| 99精品在线观看| 97中文超碰| 色婷婷婷五月天激情四射| 激情欧美日韩女同久久| 国产人妻精品一区二区三区秋霞| 亚洲双插| 午夜精品久久一区二区| 成人av福利在线观看| 风流老熟女一区二区三区l| 欧美做爰无码A片视频| 欧美性猛交美女自慰91| 麻豆福利视频导航| 午夜精品人妻二区三区| 日比av无码| A级片日韩欧美国产欧美视频精选观看| 收看日本人日bb| 柠檬AV导航| 欧美一区二区在线资源| 精品视频久久区| 男人天堂东京热| 先锋色眉乱伦资源| 九九九九久久久| 一区,二区,三区视频| 高清无码91| 老司机天天操| 久久久久免费少妇| 精品无码人妻一区二区免费蜜桃| 后入精品| 三级色综合| 七久久久| 亚欧美色图| 欧美巨大性舒爽顶到了| 综合一区中亚洲国产成人综合精品 | 久久激情五月| 国产精品高潮久久AV| 91久久国产精品| 日韩精品在线观看观看| 国产丝袜视频| 吊色| 91成人无码| 秋霞网—男女啪啪亚洲免费体验区| 午夜一区| 一区二区三区 日韩欧美| 亚洲男人天堂Av| 长久操视频| 超碰97人妻免费在线| 无遮挡h肉动漫在线观看| 男人天堂日日夜夜| 91丝袜在线播放| 久久久久国产精品喷潮免费观看臀 | 国产中文精品一区二区在线观看| 野狼激情网| 欧美瑟综合| 亚洲 一区二区 自拍| 中文字幕视频2区| 久热最新在线杭州| 黄色av一区二区在线| 伊人991| 欧美色www亚洲国产阿娇要播| 激情综合五月| 91天堂丝袜美腿| 综合操逼| 九九九九九九视频| 国产中文字幕在线点播| 国产视频三区四区| 91丝袜| 99热这里是精品| 久男人久久| 免费一级特黄特色大片在线观看看| 黄色二级片网站| 97视频网站| www.91色综合| 欧美天天干| 亚洲欧美大| 亚洲91色| 狠狠躁AV| 日本黄大片在线观看视频| 久久日韩毛| 久久色网| 一区二区三区四区姦女| 97超碰磁| 久草在| 黄色免费网页无码| 欧美,亚洲,日韩,v,天堂,手机在线观看| 国产亚洲精品农村妇女| 成人久久久精品| 在线v中文字幕一区二区三区| 青青草导航在线视频| 国产福利影视| 蜜臀AV一区二区三区| 91在线色综合| 美女裸体无遮挡永久免费观看网站| 清纯唯美激情四射| 日韩在线欧美精品一区二区| 骚逼一区二区| 岛国艾薇凹凸视频天堂| 婷婷探花久久精品一区| 开心五月婷婷激情| 91天天综合| 丝袜美腿校园春色| 69精品久久久久中文字幕| 久久99干一本高清| 插入综合网| 嫩草在线视频| 玖玖大干人妻| 9/A片| 97在线精品观看视频| Julia Annxxxxx| 五月丁香六月| 亚欧毛片基地国产毛片基地| 超碰免费欧美7| 九九在线精品| 吖在线不卡一区二区国产剧情| 日本黄色天堂| 97九色人妻| 国内亚洲精彩视频在线| 99rre在线精品99re8| 精品99999久久久久久| 精品高清一区二区三区三州| 国产97av| 国产亚洲欧洲在线观看| 手机看片1025| 欧美色www亚洲国产阿娇要播| 任你干在线视频| 久久久影院| 国产av美女被艹的乱叫| 东北毛片| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 色色丁香| 国产精品麻豆视频网站| 97超碰香蕉| 天欧美在线| 91色女| 国产一区二区三区影片| 久久超碰国产一区二区三区| 一本色道久久综合狠狠操| xxx亚洲午夜天堂| 精品亚洲国产成人AV制服丝袜| 亚洲av性爱电影| 97在线/亚洲| 乱久久久| 国产污视频麻豆传媒一区二区 | 男人的天堂VA| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 色欲久久综合| 加勒比久久综合网高清| 午夜男女爽爽大片免费观看| 亚洲精品国产拍免费91在线| 1000午夜黄色| 久插综合| 久久9精品视频| 欧美激情综合| 中文字幕性感少妇av| 一区二区精品日韩欧美在线观看 | 高清不卡一二三区视频......| 国产成人无码久久精品| 韩日性爱av| 色在线综合| 久久婷婷电影网| 91亚洲人| 91性情| 人妻熟女一区二区在线视频| 国产热av| 99re热| 久久久久久久久久久久久久久久9| 清纯唯美激情四射| 亚洲综合春色| 国产成人亚洲精品自产在线| 国产高潮AA片免费看| 深夜激情无码| 操比国产| 色色色色网站| 久久 国产精品 一区| 在线观看黄色电话| 日韩性爱视频免费在线| 欧美性爱一级操| 国产精品一区二区 尿失禁| 日韩精品中文字幕一 | 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 亚洲和欧美裸体美女双飞视频| 国产60区。| 伊人伊人LD| 欧洲精品区| 日本不卡免费二区| 999国产精品999久久久久久| 国产成人五月天丁香花| 亚洲97精品| 中文字幕丰满人妻日本| 91AV入口| 激情无码日韩| av片在线观看免费播放| 五月天色色色| 99少妇精品视频| 口爆欧美91| 久久99草| 91天天综合在线观看| 精品一区二区三区18| 久久久久久久97| 被窝影院午夜看片无码| 亚洲精品尤物yw在线影院| 高清无码 国产精品| 亚洲经典啪啪| 91网站18在线观看| 加勒比av中文| 四虎AV在线播放| 国产在线观看一区二区三区 | 日韩97视频| 777超碰| 伊人专区一区二区三区| 永久免费发布性爱网| 婷婷五月色| 第45页一区二区| 亚洲97网站| 国产女大学生AV| 久久人人爽爽人人爽人人片αV| 国产激情在线观看| 国产久久久9999| 欧美精品,四区。五区| 97网色| 巨爆乳一区二区爆乳区| 91精品久久久久久77777| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 久久五月天婷婷| 情色五月天久久久| K8久久久久| 国产av激情无码久久天堂| 一区二区三区精品久久| 欧美精品在线观看| 俺也射| 欧美成人A√在线一区二区| 日本亚洲熟女视频| 欧美成人亚洲精品| 亚洲另类色综合网站| 亚洲另类欧美精品| 五月丁香啪啪网| 青青伊人久久| 国产精品精品系列在线观看| 日日碰狠狠添天天爽超| 欧洲乱码一区二区| 日韩欧美女求操每天更新| 亚洲一区二区三区不卡国产欧美| 伊人久久88国产女| 男女香蕉一区二区| 日韩综合成人免费视频| 吻戏激情性巴克| 少妇激情AV| 日本免费人成视频播放120秒| 一区二区三区精品黑丝白丝酒店对鸡| Julia Annxxxxx| 免费少妇一区二区| http://qxhbdz.com| 91天天综合在线| 亚洲中文日韩欧美大香蕉视频| 大香蕉综合| 黑人猛交| 懂色AV一区二区三区| 婷婷丁香人妻| 欧美精品1区2区3区| 国产视频小说| 免费人成在线观看网站品爱网| 国产四虎在线| 亚洲欧美天堂| 欧美不卡在线美女| 葡萄牙性视频一二区 | 97资源久久| 日日干夜夜干| 欧美激情高清性猛交| 人人考人人摸人人干| 校园春色欧美| 国产三级多多影院2022国产AA一级毛片无码| 中文字幕天天天天天| 午夜性刺激视频免费观看| 2020视频1区2区3区| 九九热av| 亚洲丝袜色| 国产传媒av天美传媒在线| 久久久一区二区三区四曲免费听| 国产熟女一区二区| 这里只有精品久久| 91精品人妻一区二区三区蜜臀| 九九色色| 蜜桃久久一区二区| 欧美.亚洲.另类.丝袜.制服.诱惑| 日本加勒比无码专区| 久久久久久久极品香蕉视频| 麻豆精品一区二区三区四区免费观看| 欧美综合自拍成人自拍第二十页| 9久久久久| 亚洲A色| 国产亚洲女v在线观看| 欧美色综合图片| 亚洲天堂 视频你懂的| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 久久这里都是精品| 秋霞一集毛片观看| 日本超碰97日韩精品人妻| 乱伦av麻豆| 亚州色图欧美色图| 国内91熟女人妻丝袜天天精品视频在线 | 天天射天天操天天干天天吃2018| 色眯眯射| 国产亲戚伦亲在线| 欧洲人妻视频| 亚洲综合影片| 成人免费福利在线观看| 日韩久射综合| 91九色丨国产丨爆乳| 思思热国产在线视频| 久久风骚城市人| 操穴国产| 国产日韩欧美亚洲精品95 | 久99视频| jazzjazz国产精品麻豆| 欧美色图91p| 欧美色五月| 麻豆综合一区av| 女上位精品在线| 嗯嗯嗯嗯啊啊啊好紧好大| 免费无码国产精品v片在线观看| 成人夜夜| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 日本不卡高清视频| 91色亚洲| 欧美日韩亚洲五月天婷婷| 大香蕉人妻| 精品性爱| 欧美综合综合| 九九九久久久久| 91久久久久久| 小日子操bb在线看| 国产精品在线免费| 亚洲91网站| 中文字幕在线播放2中文字幕在线观看2| 浓厚中出中文字幕在线| 超碰 欧美| 久操 高清| 一本道综合色图| 亚洲最大成人a毛毛片| 天天综合网~91| 欧美日韩美女精品久草一区二区三区 | 污污污8888| 淫色网综合| 狠狠干综合| 成人免费福利网站国产| 日韩av在线精品观看| 超碰97日韩| 偷拍片久久| 久久久久久久久久黄色网| av天堂影视中文在字幕在线中文| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 亚洲性刺激| 热热色色综合| 五月天久久婷婷亚洲| 97WW精品| 久热99| 美女自卫慰黄网站免费| 26uuu性| 天天躁日日躁AAAAXXXX国产| 欧美男人天堂| 国产AV中文| 亚州欧美另类| 麻豆天美AV传媒第一页| 亚拍在线| 二三四区精品| 大香蕉啪啪啪啪在线| 午夜呻吟欧美| 大稥蕉免费视频这里只有精品| 婷婷香蕉| 婷婷色综合| 久久综合五月天| 久热伊人| 久久香蕉网| 日本色婷婷| www久久99| 99re国产中文字幕| 欧美精品日韩一区二区| 熟女六十路| 国产欧美日韩在线不卡第一页| 久久久久久久久成人av解说| 性色生活片久久毛片婬片免费放女人一级毛片 | 亚洲色图超碰在线| 伊人国产AV| 婷婷探花久久精品一区| 久久精品中文字幕女同| 色制服丝袜夫妻av一区| 久婷婷一区| 性爱AV天堂| 97国产伦理| 国产中文字幕在线观看| 久久机热| 久久精品噜噜噜成人看免欧美大片| 久久噜噜噜精品国产亚洲综合| 国产精品久久久久999| 国产精品粉嫩福利在线| 久久天堂网| 啊啊啊好舒服视频| 色香AV| 100啪啪视频大全| 91在线视频观看国产|