亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

InterBase 6.0老庫(kù)拆解:MGA事務(wù)、生成器與Delphi控件維護(hù)

InterBase 6.0老庫(kù)拆解:MGA事務(wù)、生成器與Delphi控件維護(hù) 簡(jiǎn)介InterBase 6.0 數(shù)據(jù)庫(kù)安裝包與開(kāi)發(fā)示例合集面向使用 Delphi 6 構(gòu)建客戶端/服務(wù)器數(shù)據(jù)庫(kù)應(yīng)用的開(kāi)發(fā)者及數(shù)據(jù)庫(kù)學(xué)習(xí)者可用于搭建本地測(cè)試環(huán)境、研究早期 RDBMS 的部署結(jié)構(gòu)與 API 調(diào)用方式。壓縮包共 130 個(gè)文件約 4.86MB含 33 個(gè) C 源碼、15 個(gè)可執(zhí)行程序、8 個(gè)動(dòng)態(tài)庫(kù)以及頭文件、庫(kù)文件、幫助文檔、SQL 腳本和 gdb、gbk 示例數(shù)據(jù)庫(kù)覆蓋安裝、卸載、運(yùn)行配置與基礎(chǔ)數(shù)據(jù)操作。已有 341 人學(xué)習(xí)下載對(duì)遺留系統(tǒng)維護(hù)和舊版 Delphi 數(shù)據(jù)訪問(wèn)研究仍有參考價(jià)值。讀者可獲得較完整的安裝組件、數(shù)據(jù)庫(kù)引擎依賴文件、編程接口示例和初始數(shù)據(jù)庫(kù)樣本便于理解 BDE、ODBC 等連接方式背后的文件組成也可用于排查舊項(xiàng)目運(yùn)行環(huán)境缺失、數(shù)據(jù)庫(kù)初始化與許可配置等問(wèn)題。1. 接手一個(gè)只剩 .GDB 文件的老系統(tǒng)才明白 InterBase 6.0 是什么形態(tài)交付包里沒(méi)有安裝手冊(cè)只有一個(gè) 4MB 出頭的.GDB文件和一堆 Delphi 控件源碼這是不少人第一次接觸 InterBase 6.0 時(shí)的真實(shí)場(chǎng)景。它并不是那種需要獨(dú)立 DBA 運(yùn)維的數(shù)據(jù)庫(kù)服務(wù)整個(gè)庫(kù)就是一個(gè)文件拷到目標(biāo)機(jī)器、配好連接串、把控件拖到窗體上就能讀寫。這份資源的價(jià)值也在這里服務(wù)端、客戶端連接庫(kù)、控件源碼和示例應(yīng)用湊成一套拿下來(lái)就能把一個(gè)數(shù)據(jù)庫(kù)應(yīng)用從前端到存儲(chǔ)層全部跑通。這篇按我拆包的順序?qū)懴戎v清 InterBase 6.0 的事務(wù)模型和文件組織再把它在本機(jī)跑起來(lái)然后把生成器、觸發(fā)器、存儲(chǔ)過(guò)程、UDF 這幾塊核心實(shí)現(xiàn)逐段拆開(kāi)最后落在「拿到控件源碼之后改哪里」這個(gè)實(shí)際問(wèn)題上。手里攥著老項(xiàng)目要維護(hù)的人和想拿一個(gè)輕量嵌入式數(shù)據(jù)庫(kù)練手的人都能照著走一遍。2. 技術(shù)底座MGA 架構(gòu)下的事務(wù)版本與頁(yè)面組織2.1 多代版本架構(gòu)讀不擋寫寫不擋讀先糾正一個(gè)很容易帶偏的認(rèn)知InterBase 6.0 不是靠回滾段做并發(fā)的。執(zhí)行 UPDATE 時(shí)它不原地覆蓋那一行而是把記錄的新版本寫進(jìn)數(shù)據(jù)頁(yè)舊版本留在原處只在記錄頭里把「替換事務(wù)號(hào)」標(biāo)成當(dāng)前事務(wù)。別的讀事務(wù)只要自己的快照事務(wù)號(hào)比這個(gè)替換號(hào)小就繼續(xù)讀到舊版本一點(diǎn)都不會(huì)被卡住。這就是所謂多代版本架構(gòu)MGA它的直接結(jié)果是讀事務(wù)永遠(yuǎn)不用等寫事務(wù)寫事務(wù)也不會(huì)因?yàn)橛腥嗽趻弑矶抨?duì)。沒(méi)有回滾段帶來(lái)的另一個(gè)差別在回滾語(yǔ)義上。執(zhí)行 ROLLBACK 時(shí)數(shù)據(jù)庫(kù)并不做「反向補(bǔ)償」它只是把那個(gè)事務(wù)在事務(wù)清單里標(biāo)記為已死這個(gè)事務(wù)寫下的所有版本立刻變成垃圾數(shù)據(jù)等著被回收。所以回滾一個(gè)剛插了十萬(wàn)行的事務(wù)幾乎瞬間完成不會(huì)像日志型數(shù)據(jù)庫(kù)那樣還要回放一遍。這套設(shè)計(jì)的代價(jià)也很明確垃圾版本不會(huì)自動(dòng)消失需要靠 sweep 機(jī)制回收而 sweep 能不能推進(jìn)取決于「最老活躍事務(wù)」OIT和「最老事務(wù)」OAT這兩個(gè)水位線能不能往前走。這就引出了老項(xiàng)目里最典型的一類故障。只要有一個(gè)連接開(kāi)著事務(wù)不提交——哪怕它只是SELECT了一下——OAT 就被釘在原地比它新的所有垃圾版本都回收不了庫(kù)文件只漲不縮查詢?cè)絹?lái)越慢。我在一個(gè)工控項(xiàng)目上見(jiàn)過(guò)庫(kù)文件從 200MB 漲到 3GB最后查出來(lái)是一個(gè)報(bào)表模塊的TIBTransaction忘了Commit掛了半個(gè)月。所以看一個(gè) InterBase 庫(kù)健不健康第一件事不是看數(shù)據(jù)量是看 OIT 和 OAT 差了多遠(yuǎn)。還有一點(diǎn)要注意事務(wù)隔離級(jí)別在 InterBase 里是通過(guò) TPB事務(wù)參數(shù)塊傳的isc_tpb_concurrency是快照隔離最常用isc_tpb_read_committed配isc_tpb_rec_version是讀已提交而isc_tpb_consistency會(huì)加表級(jí)鎖除非你在做批處理維護(hù)否則別碰它一旦用錯(cuò)整個(gè)系統(tǒng)的并發(fā)直接降到單線程。2.2 單文件、頁(yè)與事務(wù)計(jì)數(shù)器的物理組成.GDB文件內(nèi)部是按頁(yè)組織的頁(yè)大小在建庫(kù)時(shí)定死可選 1024、2048、4096、8192 字節(jié)。第 0 頁(yè)是數(shù)據(jù)庫(kù)頭記錄了頁(yè)大小、事務(wù)水位、影子文件信息往后是頁(yè)分配頁(yè)、事務(wù)清單頁(yè)TIP、指針頁(yè)、數(shù)據(jù)頁(yè)、索引頁(yè)和 BLOB 頁(yè)。理解這套分層最實(shí)用的工具是gstat它不做任何修改只讀取元信息。# 只看庫(kù)頭頁(yè)大小、OAT/OIT、下一個(gè)事務(wù)號(hào)、影子文件 gstat -h /opt/data/demo.gdb # 看數(shù)據(jù)頁(yè)的填充率和高水位判斷是不是碎片太多 gstat -d /opt/data/demo.gdb | more # 看索引深度深度從 3 變成 4 通常意味著索引膨脹 gstat -i /opt/data/demo.gdb-h的輸出里有幾個(gè)參數(shù)值得記住Page size決定了單頁(yè)能放多少行也間接決定了 BLOB 的讀取效率Oldest transaction就是 OATOldest active是 OIT兩者相差幾百以內(nèi)算正常差到幾十萬(wàn)說(shuō)明有長(zhǎng)事務(wù)在拖后腿Next transaction是一直遞增的事務(wù)號(hào)漲到 20 億附近會(huì)有溢出風(fēng)險(xiǎn)正規(guī)做法是做一次備份還原把事務(wù)號(hào)重置回低位。-d看的是數(shù)據(jù)頁(yè)的填充率如果大量頁(yè)只填了 30%說(shuō)明刪除和更新留下的空洞多該做一次gbak備份還原把空間收回來(lái)。頁(yè)大小定下來(lái)之后想改唯一的辦法是gbak備份再gbak -c -p 8192還原沒(méi)有在線改的路徑。所以建庫(kù)前要想清楚如果表里有一堆VARCHAR(200)加上幾個(gè) BLOB 字段用 4096 或 8192 能少很多跨頁(yè)讀如果只是幾百?gòu)埮渲帽怼涡泻苄?024 反而更省內(nèi)存。單個(gè)文件大到一定程度就得拆成多文件-- 追加第二個(gè)數(shù)據(jù)文件起始頁(yè)號(hào)接在主文件之后 ALTER DATABASE ADD FILE /opt/data/demo_02.gdb STARTING AT PAGE 200000 LENGTH 200000;這條語(yǔ)句里的STARTING AT PAGE是主文件的頁(yè)號(hào)邊界不是字節(jié)數(shù)寫錯(cuò)會(huì)導(dǎo)致新文件永遠(yuǎn)用不上。我一般只在受文件系統(tǒng)單文件上限限制的場(chǎng)景下才拆拆完一定要用gstat -h確認(rèn)Database files那一行變成了兩個(gè)否則等于白寫。2.3 服務(wù)形態(tài)本地直連還是 TCP 遠(yuǎn)程InterBase 6.0 的一個(gè)特點(diǎn)是同一個(gè)客戶端庫(kù)既能連本地文件也能連遠(yuǎn)程服務(wù)區(qū)別只在連接串怎么寫。這一點(diǎn)經(jīng)常被忽略然后在部署時(shí)踩坑——因?yàn)檫h(yuǎn)程連接里那個(gè)路徑是「服務(wù)端視角」的不是你自己機(jī)器上的路徑。連接串寫法走的協(xié)議適用場(chǎng)景C:\data\demo.gdb本地直連單機(jī)工具、免裝服務(wù)端、數(shù)據(jù)不外發(fā)localhost:C:\data\demo.gdbTCP 回環(huán)本機(jī)調(diào)試但要驗(yàn)證服務(wù)端權(quán)限和鎖192.168.1.20:C:\data\demo.gdbTCP 遠(yuǎn)程多人共用一臺(tái)庫(kù)服務(wù)器srv01:/opt/data/demo.gdbTCP 遠(yuǎn)程跨平臺(tái)部署服務(wù)端是 Linux本地直連省掉了網(wǎng)絡(luò)往返和權(quán)限校驗(yàn)啟動(dòng)快、部署簡(jiǎn)單很適合隨應(yīng)用程序一起分發(fā)的單機(jī)版。但它的并發(fā)模型比遠(yuǎn)程弱得多多個(gè)進(jìn)程同時(shí)寫同一個(gè)文件時(shí)鎖沖突會(huì)很難排查所以只要業(yè)務(wù)里有第二個(gè)人同時(shí)寫就別圖省事老老實(shí)實(shí)裝服務(wù)端走 TCP。遠(yuǎn)程連接的另一個(gè)前提是服務(wù)名要能解析??蛻舳藥?kù)默認(rèn)用gds_db這個(gè)服務(wù)名去找端口主機(jī)上必須有一行登記# 服務(wù)端和客戶端的 services 文件里都要有這行端口默認(rèn) 3050 gds_db 3050/tcp # InterBase 服務(wù)名與監(jiān)聽(tīng)端口 # 改完確認(rèn)端口真的在監(jiān)聽(tīng) netstat -an | grep 3050注意客戶端報(bào)unavailable database時(shí)先別懷疑庫(kù)文件損壞八成是這行沒(méi)登記或者被防火墻攔了。3. 跑起來(lái)從服務(wù)啟動(dòng)到控件發(fā)出第一個(gè)查詢3.1 安裝與最小可用配置服務(wù)端裝完之后要先確認(rèn)三件事進(jìn)程在跑、端口在聽(tīng)、SYSDBA能登進(jìn)去。很多人卡在第一步是因?yàn)榘芽蛻舳撕头?wù)端裝混了——客戶端只需要一個(gè)連接庫(kù)Windows 上是gds32.dll服務(wù)端才有后臺(tái)進(jìn)程。# 1) 確認(rèn)服務(wù)端進(jìn)程存在 ps -ef | grep -i interbase # 2) 確認(rèn) 3050 端口處于 LISTEN netstat -anp | grep 3050 # 3) 用命令行工具直連驗(yàn)證 SYSDBA 能過(guò) isql -user SYSDBA -password masterkeyisql是隨服務(wù)端一起提供的命令行客戶端它同時(shí)也是一個(gè) SQL 腳本執(zhí)行器后面建庫(kù)、灌表結(jié)構(gòu)、跑遷移腳本都靠它。第三步如果提示用戶名口令錯(cuò)誤說(shuō)明安裝時(shí)設(shè)的SYSDBA口令不是默認(rèn)值得找當(dāng)時(shí)的部署記錄如果提示unavailable database回到 2.3 節(jié)查服務(wù)名登記。Windows 上還有一個(gè)常見(jiàn)問(wèn)題應(yīng)用程序目錄里的gds32.dll和系統(tǒng)目錄里的版本不一致??蛻舳藥?kù)的版本必須和服務(wù)端大致匹配混用不同版本時(shí)表現(xiàn)是能連上、能查詢但一取 BLOB 或者一調(diào)存儲(chǔ)過(guò)程就崩排查成本極高。我的習(xí)慣是把服務(wù)端自帶的那份客戶端庫(kù)直接拷到 exe 同目錄讓它優(yōu)先加載別指望系統(tǒng)的搜索路徑。3.2 isql 建庫(kù)建表跑通第一個(gè)庫(kù)CREATE DATABASE是客戶端工具語(yǔ)句不是服務(wù)端 SQL所以必須在isql里執(zhí)行。路徑同樣按服務(wù)端視角寫。# 建庫(kù)頁(yè)大小和字符集在這里定死后面改不了 isql -user SYSDBA -password masterkey EOF CREATE DATABASE /opt/data/demo.gdb USER SYSDBA PASSWORD masterkey PAGE_SIZE 8192 DEFAULT CHARACTER SET UNICODE_FSS; EOF # 灌表結(jié)構(gòu)腳本開(kāi)頭先 CONNECT保證連的是目標(biāo)庫(kù) isql -user SYSDBA -password masterkey -i schema.sqlschema.sql里第一句必須是CONNECT /opt/data/demo.gdb;后面才是 DDL。PAGE_SIZE和DEFAULT CHARACTER SET建庫(kù)時(shí)定死UNICODE_FSS是 6.0 里能存多字節(jié)字符的字符集存中文就別用NONE否則排序和長(zhǎng)度計(jì)算都會(huì)出問(wèn)題。建表這塊有兩個(gè) 6.0 時(shí)代特有的寫法值得用上DEFAULT NOW這種上下文變量以及 64 位整型主鍵。CONNECT /opt/data/demo.gdb; CREATE TABLE T_ORDER ( ID BIGINT NOT NULL, ORDER_NO VARCHAR(32) NOT NULL, AMOUNT NUMERIC(18,2) DEFAULT 0 NOT NULL, STATUS SMALLINT DEFAULT 0 NOT NULL, CREATED_AT TIMESTAMP DEFAULT NOW NOT NULL, CONSTRAINT PK_T_ORDER PRIMARY KEY (ID) ); -- 訂單號(hào)唯一單獨(dú)建索引查詢走索引而不是全表 CREATE UNIQUE INDEX IDX_ORDER_NO ON T_ORDER (ORDER_NO);DEFAULT NOW是服務(wù)端求值的取的是數(shù)據(jù)庫(kù)服務(wù)器時(shí)間不是客戶端時(shí)間這一點(diǎn)在跨時(shí)區(qū)的多客戶端場(chǎng)景里很關(guān)鍵——用客戶端賦時(shí)間會(huì)出現(xiàn)同一批數(shù)據(jù)時(shí)間倒掛。BIGINT是 64 位整型只在 dialect 3 下可用用它做主鍵是為了避免幾百萬(wàn)行之后INTEGER溢出。NUMERIC(18,2)在 dialect 3 下映射到 64 位整型存儲(chǔ)精度不會(huì)丟做金額字段比DOUBLE PRECISION靠譜得多。3.3 控件對(duì)接連接、事務(wù)邊界與參數(shù)化查詢Delphi 那套控件里連 InterBase 最直接的是 IBXInterBase Express它不依賴 BDE直連客戶端庫(kù)部署時(shí)少一層中間件。核心是三個(gè)控件TIBDatabase管連接TIBTransaction管事務(wù)TIBQuery管數(shù)據(jù)集。// 數(shù)據(jù)庫(kù)連接路徑前綴決定走本地直連還是 TCP IBDB.DatabaseName : localhost:/opt/data/demo.gdb; IBDB.Params.Clear; IBDB.Params.Add(user_nameSYSDBA); IBDB.Params.Add(passwordmasterkey); IBDB.Params.Add(lc_ctypeUNICODE_FSS); // 必須和建庫(kù)時(shí)一致 IBDB.SQLDialect : 3; // dialect 對(duì)不上會(huì)報(bào)類型轉(zhuǎn)換錯(cuò) IBDB.LoginPrompt : False; IBDB.Connected : True; // 事務(wù)顯式控制別指望自動(dòng)提交 IBTrans.DefaultDatabase : IBDB; IBTrans.Params.Clear; IBTrans.Params.Add(isc_tpb_write); // 讀寫事務(wù) IBTrans.Params.Add(isc_tpb_concurrency); // 快照隔離讀不阻塞寫 IBTrans.Params.Add(isc_tpb_wait); // 遇鎖等待而不是立刻拋異常 IBTrans.StartTransaction;lc_ctype是客戶端字符集它必須和服務(wù)端建庫(kù)時(shí)的DEFAULT CHARACTER SET對(duì)上對(duì)不上的表現(xiàn)是中文變問(wèn)號(hào)或者VARCHAR(32)明明只存了 20 個(gè)漢字卻報(bào)超長(zhǎng)。isc_tpb_wait和isc_tpb_nowait的選擇直接影響用戶體驗(yàn)nowait遇到鎖沖突立刻拋lock conflict on no wait transaction適合后臺(tái)批處理快速失敗wait會(huì)掛起等待適合交互界面。查詢部分建議全部走參數(shù)化別拼字符串IBQuery1.Close; IBQuery1.SQL.Text : SELECT ID, ORDER_NO, AMOUNT FROM T_ORDER WHERE STATUS :S AND CREATED_AT :D ORDER BY ID; IBQuery1.ParamByName(S).AsInteger : 1; IBQuery1.ParamByName(D).AsDateTime : Date - 7; IBQuery1.Open; while not IBQuery1.Eof do begin // 讀字段用 FieldByName別用下標(biāo)后面加字段不會(huì)崩 Memo1.Lines.Add(IBQuery1.FieldByName(ORDER_NO).AsString); IBQuery1.Next; end; IBQuery1.Close; IBTrans.Commit; // 讀事務(wù)也要提交不然 OAT 卡住最后那句Commit是重點(diǎn)。IBX 里TIBTransaction默認(rèn)不自動(dòng)提交一個(gè)TIBQuery打開(kāi)又關(guān)掉事務(wù)仍然是活的它對(duì)應(yīng)的快照事務(wù)號(hào)就一直掛在 OIT 上。前面說(shuō)的庫(kù)文件瘋長(zhǎng)源頭往往就是這種「只讀了一下」的代碼。如果一次操作要寫多張表用TIBUpdateSQL配合TIBQuery的緩存更新把提交點(diǎn)收在業(yè)務(wù)動(dòng)作結(jié)束那一刻比一條 SQL 一次提交安全得多。4. 核心模塊拆解生成器、觸發(fā)器、存儲(chǔ)過(guò)程與 UDF4.1 生成器與主鍵發(fā)號(hào)GEN_ID 的正確用法生成器Generator是 InterBase 里的獨(dú)立計(jì)數(shù)器和表無(wú)關(guān)專門用來(lái)發(fā)號(hào)。CREATE GENERATOR GEN_ORDER_ID; SET GENERATOR GEN_ORDER_ID TO 0; -- 取下一個(gè)號(hào)第二個(gè)參數(shù)是步長(zhǎng) SELECT GEN_ID(GEN_ORDER_ID, 1) FROM RDB$DATABASE;GEN_ID的第二個(gè)參數(shù)是增量正常情況下傳 1需要一次預(yù)留一段號(hào)比如批量導(dǎo)入時(shí)傳 N。RDB$DATABASE是系統(tǒng)表永遠(yuǎn)只有一行用來(lái)把函數(shù)當(dāng)查詢跑。這里有一個(gè)必須記住的性質(zhì)生成器不受事務(wù)控制。取號(hào)這個(gè)動(dòng)作在事務(wù)回滾后不會(huì)退回所以號(hào)一定有空洞。很多人拿它直接當(dāng)訂單號(hào)展示給用戶看結(jié)果發(fā)現(xiàn)編號(hào)不連續(xù)被業(yè)務(wù)方追著問(wèn)。我的做法是生成器只做物理主鍵業(yè)務(wù)單號(hào)單獨(dú)用「日期 序列」拼序列另有自己的表去維護(hù)。反過(guò)來(lái)如果業(yè)務(wù)真的要求連號(hào)那就不能靠生成器得在一張T_SEQ表上做UPDATE ... SET CUR CUR 1并配合行鎖代價(jià)是并發(fā)性能直線下降這個(gè)取舍要提前跟業(yè)務(wù)說(shuō)清楚。4.2 觸發(fā)器把業(yè)務(wù)約束下沉到數(shù)據(jù)庫(kù)層觸發(fā)器在 InterBase 里分 BEFORE 和 AFTER還分行級(jí)和語(yǔ)句級(jí)。行級(jí)觸發(fā)器里能用NEW和OLD兩個(gè)上下文變量分別代表新值和舊值。-- 自定義異常拋出時(shí)客戶端能拿到這條消息 CREATE EXCEPTION E_AMOUNT_INVALID 訂單金額必須大于 0; -- 主鍵發(fā)號(hào)BEFORE INSERT在約束檢查之前把 ID 填上 CREATE TRIGGER TR_ORDER_BI FOR T_ORDER ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF (NEW.ID IS NULL) THEN NEW.ID GEN_ID(GEN_ORDER_ID, 1); END; -- 業(yè)務(wù)校驗(yàn)POSITION 1 保證排在發(fā)號(hào)之后執(zhí)行 CREATE TRIGGER TR_ORDER_BIU FOR T_ORDER ACTIVE BEFORE INSERT OR UPDATE POSITION 1 AS BEGIN IF (NEW.AMOUNT 0) THEN EXCEPTION E_AMOUNT_INVALID; END;POSITION決定同一個(gè)表上多個(gè)同類觸發(fā)器的執(zhí)行順序編號(hào)小的先跑。上面這兩個(gè)觸發(fā)器必須按 0、1 排否則校驗(yàn)里拿到的NEW.ID還是空。EXCEPTION拋出去之后客戶端TIBQuery會(huì)收到一條EIBErrorMessage里帶的就是E_AMOUNT_INVALID那條文本這是把校驗(yàn)規(guī)則放在數(shù)據(jù)庫(kù)層最實(shí)際的好處——不管前端是 Delphi、Java 還是命令行工具規(guī)則都跑不掉。需要注意BEFORE 觸發(fā)器里改NEW的字段是有效的AFTER 觸發(fā)器里改就沒(méi)有意義了因?yàn)橛涗浺呀?jīng)落盤。另外語(yǔ)句級(jí)觸發(fā)器FOR EACH STATEMENT在行級(jí)操作里拿不到NEW/OLD它主要用來(lái)POST_EVENT做業(yè)務(wù)邏輯時(shí)千萬(wàn)別用它。4.3 可選中存儲(chǔ)過(guò)程與事件通知存儲(chǔ)過(guò)程分兩種一種用EXECUTE PROCEDURE調(diào)用、只做副作用另一種帶SUSPEND可以被SELECT當(dāng)表查叫可選中存儲(chǔ)過(guò)程。CREATE PROCEDURE SP_ORDER_LIST (P_STATUS SMALLINT) RETURNS (ID BIGINT, ORDER_NO VARCHAR(32), AMOUNT NUMERIC(18,2)) AS BEGIN FOR SELECT O.ID, O.ORDER_NO, O.AMOUNT FROM T_ORDER O WHERE O.STATUS :P_STATUS ORDER BY O.ID INTO :ID, :ORDER_NO, :AMOUNT DO SUSPEND; -- 每處理一行掛起一次客戶端才能逐行取到 END;SUSPEND是這段代碼的核心。沒(méi)有它存儲(chǔ)過(guò)程會(huì)把所有行算完只返回最后一組值有了它服務(wù)端每算出一行就掛起客戶端取一行再喚醒內(nèi)存占用是常數(shù)級(jí)別的。FOR SELECT ... INTO里的變量名前必須加冒號(hào)這是 PSQL 里區(qū)分「字段名」和「變量名」的語(yǔ)法漏了冒號(hào)會(huì)報(bào)「列名不明確」??蛻舳苏{(diào)用有兩種// 方式一當(dāng)表查最靈活能帶排序和過(guò)濾 IBQuery1.SQL.Text : SELECT * FROM SP_ORDER_LIST(:S) ORDER BY ID; IBQuery1.ParamByName(S).AsInteger : 1; IBQuery1.Open; // 方式二TIBStoredProc適合無(wú)返回集的存儲(chǔ)過(guò)程 IBSP.StoredProcName : SP_ORDER_CLOSE; IBSP.ParamByName(P_ID).AsLargeInt : 1024; IBSP.ExecProc;配套的還有事件機(jī)制用來(lái)做「數(shù)據(jù)變了通知所有客戶端刷新」。服務(wù)端在觸發(fā)器里POST_EVENT客戶端注冊(cè)同名事件CREATE TRIGGER TR_ORDER_EVENT FOR T_ORDER ACTIVE AFTER INSERT OR UPDATE POSITION 0 AS BEGIN POST_EVENT ORDER_CHANGED; END;IBEvents1.Database : IBDB; IBEvents1.Events.Text : ORDER_CHANGED; // 多個(gè)事件名用換行分隔 IBEvents1.OnEventAlert : DoOrderChanged; IBEvents1.Registered : True; // 注冊(cè)之后服務(wù)端才會(huì)推POST_EVENT的名字建議用大寫短名老版本對(duì)事件名長(zhǎng)度限制得比較緊不要寫成一句描述。更關(guān)鍵的是OnEventAlert回調(diào)是在客戶端庫(kù)的后臺(tái)線程里觸發(fā)的在里面直接操作 VCL 控件會(huì)因?yàn)榭缇€程訪問(wèn)出玄學(xué)崩潰正確做法是TThread.Queue或者PostMessage把刷新動(dòng)作丟回主線程。我第一次用事件通知時(shí)就在這里翻過(guò)車表現(xiàn)為「偶爾」崩查了兩天才定位到線程上。4.4 UDF拿到源碼后自己編一個(gè)外部函數(shù)庫(kù)內(nèi)置函數(shù)不夠用時(shí)InterBase 支持外部函數(shù)UDF把 C 函數(shù)編成動(dòng)態(tài)庫(kù)在數(shù)據(jù)庫(kù)里聲明之后就能在 SQL 里調(diào)用。/* myudf.c —— 編成動(dòng)態(tài)庫(kù)后由服務(wù)端加載 */ #include string.h /* 參數(shù)用 CSTRING 聲明時(shí)收到的是以 \0 結(jié)尾的字符串指針 */ long STRLEN_UDF(char *s) { if (s NULL) return 0; return (long) strlen(s); }# Linux 下編成 .so位數(shù)必須和服務(wù)端一致32 位服務(wù)端只認(rèn) 32 位庫(kù) gcc -shared -fPIC -O2 -o myudf.so myudf.c # Windows 下編成 DLL cl /LD myudf.c /Fe:myudf.dll編出來(lái)之后丟到服務(wù)端的 UDF 目錄然后在庫(kù)里聲明DECLARE EXTERNAL FUNCTION STRLEN_UDF CSTRING(256) RETURNS INTEGER BY VALUE ENTRY_POINT STRLEN_UDF MODULE_NAME myudf;三個(gè)參數(shù)各有講究CSTRING(256)告訴服務(wù)端按定長(zhǎng)字符串傳參如果用VARCHAR(256)聲明傳進(jìn)去的是帶長(zhǎng)度前綴的結(jié)構(gòu)體指針函數(shù)簽名就得跟著改BY VALUE表示返回值按值傳整型必須加這個(gè)漏了會(huì)讀到一個(gè)野指針ENTRY_POINT是導(dǎo)出符號(hào)名MODULE_NAME是不帶擴(kuò)展名的庫(kù)名。改完庫(kù)之后必須重啟服務(wù)端連接才會(huì)重新加載改完函數(shù)不重啟是最常見(jiàn)的「明明改了卻沒(méi)生效」。5. 避坑與排查五個(gè)把項(xiàng)目拖進(jìn)坑里的細(xì)節(jié)5.1 恢復(fù)之后主鍵沖突集中爆發(fā)現(xiàn)象從生產(chǎn)庫(kù)備份出來(lái)恢復(fù)到測(cè)試環(huán)境應(yīng)用一插數(shù)據(jù)就報(bào)violation of PRIMARY or UNIQUE KEY constraint但表里明明只有幾百行。原因gbak做完整備份還原時(shí)會(huì)把生成器的當(dāng)前值一起帶過(guò)去但如果這次恢復(fù)用的是只導(dǎo)結(jié)構(gòu)的 DDL 腳本或者用-m只恢復(fù)元數(shù)據(jù)生成器的值就回到了建庫(kù)時(shí)的初始狀態(tài)。而數(shù)據(jù)行是從別處灌進(jìn)來(lái)的ID已經(jīng)用到了幾千兩邊一撞就沖突。解決恢復(fù)完之后先對(duì)齊每個(gè)生成器再讓應(yīng)用跑起來(lái)。-- 把生成器重置到當(dāng)前最大 ID批量做的時(shí)候用腳本生成這段 SET GENERATOR GEN_ORDER_ID TO 0; SELECT GEN_ID(GEN_ORDER_ID, COALESCE(MAX(ID), 0)) FROM T_ORDER;第二句借GEN_ID的步長(zhǎng)參數(shù)一次性把計(jì)數(shù)器頂?shù)組AX(ID)比SET GENERATOR ... TO 具體數(shù)字少一次人工查數(shù)。我現(xiàn)在的習(xí)慣是恢復(fù)腳本最后必須帶這一段每個(gè)生成器一行缺一個(gè)就等著線上報(bào)沖突。5.2 庫(kù)文件只漲不縮sweep 跑不動(dòng)現(xiàn)象刪了幾百萬(wàn)行歷史數(shù)據(jù)磁盤占用一點(diǎn)沒(méi)降查詢一天比一天慢跑gfix -sweep跑了幾個(gè)小時(shí)還在跑。原因刪除在 MGA 里只是把版本標(biāo)記成死真正回收要靠 sweep。而 sweep 能推進(jìn)的前提是 OAT 能往前走只要有一個(gè)長(zhǎng)事務(wù)不提交回收立刻停擺。第二個(gè)原因是 sweep 本身是協(xié)作式的它和正常業(yè)務(wù)搶資源業(yè)務(wù)壓力大時(shí)會(huì)一直退讓。解決先查 OIT 和 OAT 的差距定位長(zhǎng)事務(wù)再?zèng)Q定是手動(dòng) sweep 還是干脆做一次備份還原。# 看水位線差距差幾十萬(wàn)說(shuō)明有長(zhǎng)事務(wù) gstat -h /opt/data/demo.gdb | grep -i oldest # 手動(dòng)觸發(fā)回收最好放在業(yè)務(wù)低峰 gfix -sweep /opt/data/demo.gdb -user SYSDBA -password masterkey # 徹底方案?jìng)浞葸€原空間能真正收回來(lái) gbak -b /opt/data/demo.gdb /tmp/demo.fbk -user SYSDBA -password masterkey -v gbak -c -p 8192 /tmp/demo.fbk /opt/data/demo_new.gdb -user SYSDBA -password masterkey -vsweep只回收頁(yè)內(nèi)空間文件大小不會(huì)縮只有備份還原才會(huì)重寫整個(gè)文件、把空間真正交還給文件系統(tǒng)。所以計(jì)劃里應(yīng)該把「定期備份還原」當(dāng)成運(yùn)維動(dòng)作而不是只當(dāng)災(zāi)備。5.3 Dialect 混用DATE 變成 TIMESTAMP雙引號(hào)變成標(biāo)識(shí)符現(xiàn)象客戶端查出來(lái)的日期字段多出了時(shí)間部分一條WHERE NAME ABC忽然報(bào)「列名不明確」NUMERIC(18,2)的金額在小數(shù)位上丟精度。原因這是 dialect 1 和 dialect 3 的語(yǔ)義差異。dialect 1 里DATE實(shí)際是帶時(shí)間的 TIMESTAMP雙引號(hào)包起來(lái)的是本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
www.大香| 九九九免费视频| 国产精品无码论坛| 欧美成人黄网色网站| 日本伦乱九九九综合| 亚洲欧洲第二视频在线观看色图| 丝袜美腿诱惑亚洲欧美视频在线观看| 日韩操人| 久久精品国产72国产精品福利| 欧美九九九| 超碰天天操| 日韩精品三区四区| 五月婷婷激情网| 十八禁的黄污污免费网站| 久久久久亚洲Av无码专区老牛影视| 久久人妻无码毛片A片麻豆| 亚洲欧美精品一区天堂久久 | 欧美亚洲特P| 欧美丝袜美女电影一二三四区| 日韩情色视频| 大香蕉手机在线视频| 国内精品伊人久久久久影院会| 日韩中文字幕国产| 亚欧毛片基地国产毛片基地 | 天天日天天舔| 激情文学网伊人| 日韩性爱播放| 色综合色综合网| 抽插无码高清一区| 丰满人妻av一区二区三区| 久久精品欧美一区二区三区不卡| 日韩av免费一级电影| 欧美亚洲首页| 啊啊啊网站| 欧美黑人与女人91| 青青草这里只有精品| 国产第二页| 中文字幕人乱码中文字的预防方法 | 九九热男人天堂| 欧美熟女少妇| 久久免费看高潮毛片韩国| 香蕉在线一区二区三区| 人妻天天爽夜夜爽精品2| 五月激情天| 天无日色综合| 欧美 青青草| 丁香婷婷激情五月天无毒不卡| 色哟哟-国产专区| 色一射色一射| 伊人国产视频| 日韩综合色网| 久久国产精品m码| 亚洲天堂男人天堂| 特级丰满少妇一级AAAA爱毛片| 日韩av不卡在线看| 日本123区操B视频| 欧美中文字幕男人天堂久久精品| 加勒比海成人视频网| 夜夜免费视频| 亚洲日本激情| 日本日逼视频网| 欧美日韩性感| …中文字幕亚洲乱,97人妻无码费视…| 台湾佬中文娱乐网久久久久久久久久com | 性色av一区二区| 精品性爱久久视频| 亚洲无992tv| 国产精品午夜福利亚洲综合网| 韩国黄片aaaa| 日产国产精品中文久久婷婷| 5252色欧美在线男人的天堂| 探花视频免费观看国产专区| 91呆哥人妻| 素人美腿视频网站| av草草在线电影| 射综合网| www网站黄| 青青草视频久久| 中文字幕久久亚州无码| 啊啊啊免费| 成全在线观看免费观看| 日本丝袜美腿人妻九九| 男人的天堂va在线| 亚洲AV无线| 欧美激情亚洲色图| 美女9118禁| 手机看片日韩人妻| 啪啪91| 人妻激情在线视频| 色天使亚洲综合在线观看| 丁香五月电影| 91美女高潮| 中字幕人妻一区二区三区| www久久久| 加勒比伊人综合| 国产精品不卡高清在线观看| 日日日日日| 少妇内射视频| 日韩精品人妻一| 亚洲男人天堂2012| 91w欧美| 亚洲AV无码久久久国产精品| 97频视在线| 91AV入口| 蜜桃精品一区二区三区ww| 精品国产99999| 玖玖爱免费观看视频| 91欧美偷拍| 偷拍 亚洲 欧美| 国产动漫操逼视频| 亚洲男人天堂2| 亚洲国产精品9999在线观看| 人妻酒店出差被中出免费在线播放| 99色网| 99热成人| 久 久无码人妻AV| 9999久久久久| 日本一二区不卡| 99re视频在线观看这里只有精品| 久久久久久久91| 人人做人人妻人人夜视频| 男人网站婷婷| 中文字幕 国产区| 色偷偷人人玩人人舔人人操人人摸人人爽 | 国产强奸91| 天美国产精品| 国产精品盗摄 偷窥盗摄| 久久精品人体| 日韩欧美中文| 一区二区视频在看| 9/A片 | 色色国产| 国产成人超碰在线| 欧美在线啊啊啊 | 丁香7月婷婷| 在线v中文字幕一区二区三区| 使劲用力艹少妇视频一区二区| 少妇啪啪自拍| 亚洲97在线| 久久精品一区二区三区不卡| 亚洲欧美另类图片| 久久精品一区| 免费一级毛片在线视频观看| 97色综合中文网| 曰韩欧美国产传媒麻豆第一区| 啊啊啊啊啊在线| 91+欧美| 操逼逼中文字幕| 中文字幕欧美日本乱码一线二线| 丁香九月婷婷| 国产一区二区三区白丝| 骚熟女AV网| 亚洲午夜免费狠狠干| 五月丁香黄色网| 婷婷九月国产| 91蜜臀熟女| 日韩Va亚洲va欧美Ⅴa久久| 综合欧美色图| 无码人妻精品一区二区三区九九| 五月丁香六月激情综合| AV和黑人在线播放| 青青草一区二区高清无码视频| 97香焦色区| 无码人妻精品一区二区中文 | 九九综合色| 日韩欧美亚洲自拍偷拍| 国产精品久久久久久9999| 无码9区| 午夜激情成人在线观看| 亚洲熟女综合一区二区| 无卡一区=区| 97超碰色五月| 99日韩| 欧美黄色大片在线观看 | 强奸乱伦Av网| 亚洲无码视频免费在线观看网址!| 欧美亚洲高清不卡| 天天天乱色综合全| 五月丁香激情综合| 户外裸露刺激视频第一区| 在线观看中文字幕| 亚洲男人天堂2017| 日日AAvv| 啊啊啊啊好爽好舒服一区二区易域| 99精品久久久久久| 蜜桃一区二区三区| 人妻精品4K4K4K4K4| 五月婷婷基地| 国产精品久久成人免费| 午夜福利精品| 狠狠色狠狠色狠狠五月| 熟妇的味道HD中文字幕| 亚洲天堂一区二区久久| 精品亚洲国产成人精品| 强奸国产在线| 欧美系列在线一区二区| 国产熟女完整版中字 | 黑丝日韩av丝袜av| 国产白领连续中出在线观看| 国语人妻精彩刺激| 粉嫩国产精品久久粉嫩| 婷婷久久五月| 色区久久| 骚逼高潮久久精品| 亚洲国产第一页综合视频| 蜜乳AV一区二区三区四| 激情四射婷婷四五月天| 97日视频| 日产123区精品免费观看| 丰满少妇高潮无码| 日日嗷| 蜜桃网熟妇| 超碰4A| 久久久女人| 性高潮久久久久久久久久久| 97久久超碰日韩精品| 夜夜嗨一区二区三区三州加勒比 | 韩国黄片aaaa| 99性爱| 激情网五月天| 亚州色站 日韩电影| 欧洲精品在线播放| 91性| 亚洲国产97在线精品一区| 日日骚一区二区三区| 久久久999国产精品| 亚洲第一页色网| 国色综合天| 国产91影院| 日本黄色精品专区网站| 黄色性爱网网| 亚洲有码 视频一区| 台湾佬中文娱乐自偷自拍| 国产极品久久久| 黄色十八禁| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 国产激情久久久| 人妻熟女午夜精品在线| 久久只有精品一区二区三区| 91青青在线视频| 超碰97综合| 69av一区二区三区| 亚洲欧美国产成人综合不卡| 精品一区二区3区| 波多野结衣被操50分钟免费视频| 久久9精品网站| 玖色av| 中文字幕制服诱惑| 欧美一区二区观看在线| 伊人五月天青青草婷婷| 国产熟女自拍| 国产欧美日本亚洲精品| 高清在线偷拍自拍视频| 91色综合激情| 91黄站| 日韩探花精品在线视频| 极品粉嫩一区二区| 91亚洲黄色网| 大香蕉久| 九九热超碰97亚洲最新香蕉| 4tube欧美女厕所| 国产精品ⅴ无码大片在线看.| 国产成人在线观看综合| 国产白丝在线| 欧美操人视频| 9/A片 | 亚洲高清91| 亚洲欧洲综合av在线| 日日干日日| 人人操人人射人人干| 国产精品视频内谢女人| 国产精品老师| 欧美肥臀在线| xxx0国产在线播放| 涩亚洲欧洲| 精品久久无码午夜福利| 草b在线| 性一级黄色录像片网站导航| 国产精选三级在线观看| www.av不卡中文字幕| 亚洲国产一区二区日韩专区| 久久综合中文国产| 亚洲天堂五月天国产| 中文字幕一区 二区三四五 区日 日骚| 男人天堂免费| 精品国产www久久| 国产免费久久精品99re韩国| 欧美国产欧美在线观看| 60秒免费视频| 国产亚洲色婷婷久久99精品91葵花宝典 | 中文字幕乱碼在线| 成全动漫视频观看免费下载| 中文字幕艹艹| 性久久久| 欧美日韩亚洲五月天婷婷| 国产成人拍国产亚洲精品| 97超级久久强资源| 欧美日韩在线小说 | 久久久禁| 国产精品视频白浆免费| 久操国产在线| 98一区二区精品| 東南亚性呦成人伦理资源在线视频| 亚洲二区精品在线观看| 97久操| 大香蕉亚洲中文| 97久久国产| 色一射色一射| 在线看的av| 亚洲超碰综合网| 夜夜影视四色| 97超碰碰| 五月天加勒比啪| 中文字幕狠狠玩| 视频在线观看青青99国产| 青青草天天亲夜夜操网| 啊啊啊免费| 一区二区三区男女操逼黄色小电影| 亚洲日韩精品久久久久一区壹牛| 亚洲丝袜99| 99久久九九| 欧美激情综合| 大香蕉草草| 欧美日韩国产传媒在线精品| 午夜操逼不卡| 91天美免费| 香蕉一区二区三区在线视频| 亚洲天堂7777| 久久国产成人精品国产成人亚洲| 裸体美女久久久| 2010男人的天堂| 日本三级A片网站com| 日韩特一级久久| 97九色人妻| 欧亚性爱在线视频| 一区二区高清视频| 天美传媒精品久久视频| 美女干逼2| 男人天堂2019亚洲| 国产精品蜜乳AV| 精品一级毛片在线观看| 免费视频观看60秒| 欧美日韩青操| 亚洲欧洲小说图片视频 | 蜜桃不卡一区二区| 亚洲日本成人动漫| 国产精品久久久无码AV网站| 一级AV性爱| 亚洲丝袜二区在线| 超碰在线97国产| 欧美日韩性感| 综合婷婷| 图片区小说区| 在线观看色视频| 国产91影院| 国语精品对白| 男人的天堂kva| 国产成人主播| 一区中文字幕二区日韩| 美女露胸露奶头| 99re国产中文字幕| 韩国成人精品久久久免费看| 91伊人久| 色视频蜜乳| 天天看天天日| 玖草在线视频| 久久久久9999| 亚州综合网| 欧美成人贴图| 精品少妇一区二区| 中文字幕欧洲有码| 91痴汉| 超碰在线综合97| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 无码高清专| 不卡av在线中文字幕| 中文一区二区三区影院| 日韩精品-原创伙伴| 久久久天堂| 欧美成人精品一区| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 伊人网高清| 97色欧洲| 日本久久超碰| 大香蕉中文| 精品国产乱码久久| 青娱乐淫乱1314| 电家庭影院午夜69久久夜色精品国产69乱| 午夜九九九九九九| 久久久久少妇| 亚洲视频1区| 天天色黄色影院天天操| 在线A日本| 成人a大片在线观看| 手机在线播放国产福利| 久草视频分类在线| 殴美性色a级欧美| 有码免费观看| 成人欧美日超碰| 欧美色图自拍| 亚洲午夜未满十八勿入网站日本又色又爽又黄| 国产无码精品久久久久久| 乱伦日本中文自拍| 一,爱啪啪,在线免费视频| 欧美性爱系列| 熟妇熟女视频一区二区三区| 久久天天躁日日躁狠狠躁 | 日本一级真人黄色性爱视频| 欧美18 在线观看| 国产亚洲中文不卡二区| 色99视频| 校园春色中文字幕AV| 亚洲se电影| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 丁香五月综合| 情色五月天久久久| 在线观看啊啊啊啊啊| 99热在线播放| 亚洲囯产精品女人久久久| 国产树林里野战在线看| 超碰 另类 欧美| 夜夜骑操视频| 色牛aV| 丰满高潮18xxxx| 日本天天吊| 好爽免费视频,| 亚洲色宗合| 成人乱人伦一区二区| 五月婷婷基地| 老司机久久| 久久色精品视频在线| 久久精品久久九九精品| 精品精品精品| rivers-china.com| 国产精品久久久久久久AV大片| 高清在线偷拍自拍视频| 天堂亚洲精品久久老牛| 日韩精品资源专区二区| 精品妇女一区二区三区| 天天躁日日躁狠狠狠躁| 看一级特黄a大一片| 中文伊人大香蕉视频| www. 男人天堂成人在线| 丰满熟女一区二区三区在线播放| 亚洲AV成人无码一区二区三区在线观看 | 亚洲和欧美裸体美女双飞视频| 一区二区三区高清| 久久美女福利是上海美女| 国产精品。| 秋霞Av理论一级在线| 亚洲综合色婷婷| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 综合五月婷婷| 欧美在线第五页| 377p欧洲日本亚洲大胆| 成人黄页| 欧美一级特黄淫片在线观看| 久久亚洲熟妇在线视频| 高清无码久操视频| 亚洲AV乱码专区国产噜噜亚洲| 男人天堂2030| 婷婷六月色| 台湾佬大香蕉| 七久久久| 国产精品天堂| 性色avv| 亚洲av成人精品一区| 夜夜嗨一区二区| 天天干人人乐| 日本曲间由美性生活片| 日本性感人妻91| 久久久噜噜噜久久久| 一区在线精品中文字幕| 日本少妇va7777| 中日韩一区二区三区欧美| 青青草原狼av| 久久午夜鲁丝片| 欧美激情一区二区| 免费簧片在线观看| 果冻传媒一区二区三区| 亚洲中文字幕三级在线| 狠狠爱综合网| 日本欧美色| 人妻 中文 日韩| 亚洲乱熟女一区二区| 亚洲精品国产精品乱码不99| 欧美亚州综合网图片| 99激情视频| 九九九九热| 区一二区日韩亚洲乱码av电影| 东京热视频网| 中文一区二区| 男人天堂2019亚洲| 色欲三区| 久久久久久99999国产精品| 激情av| 国产强奸无码乱伦| 91伊人久久在线| 亚洲色五月| 亚洲精品自拍| 男人天堂最新手机版在线青青草| 亚洲欧美精品一区天堂久久 | 夜夜嗨av午夜成人| 青娱乐日韩无码| 1区2区3区视频| 性性久久| 精品一区二区三区蜜桃臀赵总 | 成人片视频| 色婷五月| 国产又黄又粗的视频| 亚洲影视第一页| 日韩女优中文字幕| 日韩中文字幕在线视频观看| 性天堂| 青青草好吊| 亚洲熟妇丝袜在线观看| 免费在线观看国内色片网站网址| 97超碰精品| 啊啊啊啊啊啊啊在线| 又大又白奶子| 亚洲性爱无码乱伦av| 超碰在线人人射| 在线观看啊啊啊啊啊| 中文字幕亚洲欧美在线不卡| 99精品久久| 成人aⅴ一区二区三区| 好色综合| 亚洲天天在线| 日韩有码中文字幕女同性恋| 亚洲系列欧美| 久久99999| 91亚洲不卡一区| 爱我干综合| 国产曰批免费观看久久久| 91这里只有精品| 中国91AV| 九九九成人| 91伊人久久在线| 884t在线| 今日头条成人一区二区三区四虎精品| 欧美成人9797| 亚 欧 美 综合| 午夜男人一级A片7777| 久久美女国产| 上海一级黄片| 欧美 日韩 亚洲 春色| 草草草视频在线免费看| 神马久久午夜| 大色综合| 天天日天天干天天操| 青青五月天| 久久久涩| 麻豆视频一区二区| 青娱乐黄色录像| 欧美性高潮| 超碰色大香蕉| 日韩图色| 人妻少妇精品| 色姑娘综合网| 精品人妻一区二区三区在| 九九九九九精品| 99999re| 啊啊啊免费视频| 97干97色| 国产JDAV无码视频在线观看| 欧美成人A√在线一区二区| 精品国产Av无码久久久亚洲| 日韩成人私密一级精品av| 亚洲精品国产精品成人| 在线毛片片免费观看| 国产第12页| 久久久久亚洲?V片无码V| 激情综合二| 另类专区在线观看| 麻豆60秒| 夜夜狠狠躁日日躁色视频| 人妻免费观看| 在线视频资源| 999久久久免费精品国产牛牛| 中文操逼字幕| 中日韩熟女| 亚洲成?V人片在线观看福利| 国产欧美美女免费观看视频| A啊啊在线观看| 久草线上视频免费看| 清纯唯美第一页| 91天天看| www国产天美久久久| 婷婷五月天成人网| 九九九九日本| 蜜臀va69| 两女互慰AV高潮喷水在线观看| 久久久久久久亚洲Av无码| 91日韩在线| 美欧老女人97| 婷婷午夜清品久久久久久久性色视频观| 国语av狠狠色丁香婷婷综合激情| 国产精品久久久久亚洲av| 任你草| 久久国99999| 国产日本顶级一区二区三区| 亚洲黄色视频在线观看视频| 成视频在线观看免费看| 国模不卡一本二本三电影| 中文字幕第二页| 国产无马在线| 色婷婷影院| 超碰免费欧美7| 上特色A在线| 睡产熟女乱伦| 91丝袜激情在线| 欧美激情视频一区二区| 久久精品国产亚洲AV片多多 | 久久久久亚洲三级电影| 色情成人五月天| 91欧美性| 岛国A V在线免费看| 色婷婷99| 我想要啊 啊 啊| 免费啪啪av| 台湾佬激情综合| 人妻熟女一区二区| 中文字幕黄片在线| 91狠婷| 久久天堂网| 国产精品美女在线一区| 在线 亚洲 网爆 自拍| 后入式免费视频| 日韩九区| 啊啊啊慢点| 免费看欧美美女黄色大片| 97一区二压| 97超碰磁| 后入内射蜜桃臀| 精品视频在线观看| 欧美性猛交美女自慰91| 日韩99999| 亚洲色五月| 97色欧洲| 99精品在线| 亚洲人妻日日日| 日韩婷婷| 久久99国产精品| 青青草日韩无码| 欧美色图欧美| 麻豆人妻精品一区二区| 1024精品在线| 理论久久婷婷网 8| 麻豆天美传媒毛片| 美日韩一卡二卡三卡免费人妻精品| 亚洲成成熟女人综合一区二区| 色婷婷小说| 久久久夜夜夜| 亚洲另类久操网| 久久久性| 青青草乱入乱欲视频在线观看| 国产黄色在线播放观看| 国产精品密臀网在线观看| 翔田千里一区二区三区奶水| 亚洲资源网| 围产精品一区二区三区视频播放| 激情婷婷丁香网| 99爱精品| 强奸乱伦AV一天堂网| 久久久久七视频| AV污污污污| 欧美同性恋 的搜索结果 - 91n| 久久婷婷视频| 亚洲中字幕日本一区二区三区| 久久神马影院| 国产女性无套 免费观看| 99re28在线观看| 中文字幕视频2区| 国产免a费看黄片在线| 999九九九九国产动| 色五月婷婷五月天| 免费观看网黄| 日本性一区| 爽爽淫人网| 免费?级毛片无码?∨蜜芽试看| 黄色av播放免不| 亚洲天堂东京热| 日韩国产在线观看av| 亚洲av资源| 樱花草社区www中国| 天天日天天干天天整| 日韩少妇无码| 日韩大香蕉精品在线视频| www.夜夜| 老司机射| 最新日本中文字幕| 婷婷九月丁香| 神马久久久久久久久久| 色色色欧美| 亚洲国产av中文字幕久久| 日本一二三免费久久| 综合网亚| 97天天爽| 无码视频黄色网战| 欧美一区二区三区互相| 四虎在线视频| 夜夜 中文视频rt| 国产乱码久久| 后入福利视频| 日韩三A大片在线观看| 国产免费大片| 亚洲第一在线视频| 97资源视频| 国产美女高潮视频| 亚洲天堂自拍| 激情丁香五月| 另类TS人妖一区二区三区 | 亚洲精品国产拍免费91在线| 日本视频一区二区三区| 91亚州欧美| 超清中文乱码字幕| 人妻出轨一区二区三区| 97人人超| 91九色精品熟女内射| 亚洲精品aa久久伊人| 日本成人电影资源网| 天天色天天干天天射| 秋霞操逼片| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 人人操,人人插| 国产高清成人传媒影视| 能在线播放的国产三级| 色综合99999| 欧美性爱中文字幕无线码| a人片中文字幕一区二区| 国产精品一区午夜福利| 国产原创自拍| 综合天天。| 精品人妻伦一二三区久久| 99久久久无码精品国产人| 91色亚洲| 国产 日韩 欧美一区| 操熟女91| 夜夜草我| 无码精品久久久久久亚洲| 青青草久草| 亚洲无码精品AV久久久| 51久久夜色精品国产麻豆| 一级一性爱免费视频| 青青青国产手线观看视频2| 日韩成人无码| 国产精品嫩草影院免费| se吧提供91精品国产91久久久久久| 日韩无码一级黄色av片| 午夜乱轮操逼视频免费看| 制服乱伦| 欧美日韩淫加| 中文字幕第95页| 91亚洲电影| 欧美强奸乱能| 色婷婷基地| 成人A片男人的天堂| 五月天精品| 亚洲伊人成综合成人网| A片大香蕉在线| 色噜噜精品一区二区三| 日本有码久久| 超碰 国产熟女精品一区| 天天日天天干天天操| 翔田千里一区二区三区奶水| 中文字幕一区日韩精| 一区| 国产成人91一区二区三区| 亚洲一级特黄大片在线播放91| 五月色综合| 人人九九精| 在线中文字幕极品av| 99自拍B亚洲 | 中文一区二区婷婷视频| 九一性生活免费视频| 天天做天天爱| 91GD.COM| 肉丝中文无码高清| 眼镜人妻101.com| 麻豆 欧美 日韩| 99久久99九九99九九九| 久久XX| 色偷偷超碰亚洲| 免费的黄片有限公司| 国产suv精品一区二区四| 久久久国产av美女私房| 亚洲日本加勒比在线| 亚洲骚逼少妇| 99久久无色码| 免费αV在线视频| 久久久久ab| 日本黄色大片一级视频免费麻豆| 欧美一区二区在线资源| 女欧美一区二三区| 9久精品视频在线观看| 三男一女不戴套的A片| 国产不卡中文字幕免费avi| 99久久精品欧美国产| 欧美曰韩国产精品| 小视频国产| 欲女人妻性色av| 激情综合亚洲| av三级电影在线播放| 欧美久久婷婷| 性在久久久久久| 97在线/亚洲| 久久亚洲不卡| 操逼片国产| 偷拍新久久| 炮色五月| 日本色色色视频| 天天澡天天爽日日AV| 激情小说亚洲图片| 国产激情av女片自拍| 97超碰色色| 亚洲美女黄色| 欧美亚男人的天堂| 色婷婷视频| 天天肏视频| 天天综合站| 妇人噜噜| 欧美aⅴ99久久黑人专区| 欧美不卡二区| 国产亚洲色停停久久99精品91| 土豪酒店各种姿势玩弄极品幼稚| 黄页18禁| 五月天伊人| 熟女字幕| 欧美日本中字另类在线| 国产精品一区二区a| 蜜臀中文无码午夜| 日韩午夜国产| 久操B网| 东京热激情视频一二三区| 亚洲av影音先锋| 国产日本久久免费精品| 国产黄色剧情影片麻豆免费播放| 91亚洲黄色网| 亚洲天堂另类| 欧美激情 亚洲色图| 天美传媒精品一区二区| 91情色在线| 另类欧美色| 免费观看一区| 视频国产成人精品日本亚洲18| 网友自拍第1页| 青青草福利视频| 国产精品福利资源在线尤物| 超碰95| 久久久久久亚洲中文| 在线a v| 日本精品第一视频在'| 97国产成人精品免费视频| 亚洲成A∨人影院在线欢看| 丁香五月激情综合国产| 99精品久久久久久久婷婷蜜桃| 91中文在线| 东北女人的毛片| 欧美精品久久| 91视频在线观看18| 粉嫩av久久一区二区三区| 99re公开精品免费视频| 日本道久久综合色色| 一本一道人妻久久一区二区三区 | 色九九九九九九| 久久九色| 久操视频资源站公开| 精品四五区| 久久久国产精品亚洲精品| AV天堂因数| 免费作爱一级视频| 黑操B| 亚洲做性| 国产精品午夜福利亚洲综合网| 欧亚性爱啪啪| 日韩人妻网站| 97日韩| 婷婷丁香在线| 精品999日本| 欧美后入| 日本天天吊| 日比av无码| 天堂中文资源在线bt| 97色视频在线| 日本一级真人黄色性爱视频| 欧美v亚洲v日韩v最新在线二区| 日韩三级在线观看mp4| 老司机福利青青草| 久草成人福利导航| 亚洲成人AB| 国产高清无码一区二区三区四区皇冠| 亚欧中文字幕在线视频| 日本在线观看网址| 四虎AV无码| 综合网91| 一区,二区,三区网站| 98人妻精品一区二区色欲| 伊人久久青青草| 中国农村熟妇毛片视频| 日韩一级二级在线| 午夜福利无毒不卡| 69久久久久久久久久久久久| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 爱欲AV| 精品日韩中文在线| 亚洲精品1区| 国产亚洲女v在线观看| 嗯嗯啊好大| 国产黄色av大片网站| 亚洲 欧美 日本 国内 首页| 天天干天天干天天干| 日韩精品在线观看观看| 久九9精品| 97视频网站在线观看| 蜜乳Av成人片网站| 亚洲人妻色图| 欧美激情黑人| 亚州伊人色综台| 中文字幕亚洲永久精品| 97在线免费视频观看| 人妻爽爽啪视频| 久久久久9999| 国产又黄又爽又刺激久久久久久 | 97亚洲国产| 欧亚第一综合网| 亚洲有码 欧美精品| 超碰成人公开| 男人的天堂99| 欧美日本不卡| 亚洲AV高潮| 色蜜AV| 麻豆精品久久久久久久| 无码日韩人妻av一| 成人蜜乳小视频网站| 玖玖资源视频一区二区三区| 精品人妻夜夜草| 色久综合| 色色色热| 色综合久| 国产精品视频精品一二| 乱伦Av网| 图片区小说区| 强奸乱伦动态污图免费| 久久久久亚洲AV无码专区少妇| 男人在线天堂| 老司机福利青青草| 亚洲乱码精品一区二区| 人人摸人人入| 夜夜爽夜夜| 韩日自拍| 精品乱子一区二区三区99| 久久草大香蕉| 午夜黄色免费在线观看| 欧美日本国产日韩激情视频| 乱伦熟女论坛| 国产成年女黄特黄| 日本一二三免费久久| 视频二区熟女人妻| 97在线观看免费视频l| 伊人青青一区成人视频在线观看区| 丁香五月综合| 亚洲日韩美女中文字幕乱| a片偷拍视频| 中文字幕丰满人妻日本| 免费一二区| 亚洲AV无码乱码| 精品传媒在线一区| 亚州欧美色图| 少妇久久久久久| 无码人妻一区二区三区四区老鸭窝| 天天综合,91入口| 丰满少妇精品一区二区| 五月天婷婷社区| 精品九九| 中文字幕,人妻,日韩| 日韩性爱人人爱人人操| 国产精品爱欲| 久草免费在线一区二区| 激情五月天丁香| 美女的肌被草喷水视频| 色婷婷婷五月天激情四射| 91高跟美女在线播放| 天天操福利视频综合网站| 999精品乱码| 两性色网| 国产四虎在线| 九九九九一级| 亚洲精品自拍| 色香色欲天天综合网天天来吧 | 亚欧高清| 亚洲操人| 欧美在线l亚洲| 97在线免费看视频| 手机在线视频国内精品| 欧美 亚洲 综合 制服| 试看60秒| 免费av在线播放二区| 婷婷五月激情综合| 欧美色日本| 久久一区二区三区四区五区| 377p欧洲日本亚洲大胆| 精品久久久av| 殴美性天天| 日本一级黄色电影| 国产麻豆一区二三区| 久久无码一区二区二三区性色| 色色婷| 久9爱经典视频 | 91骚熟女| 久久久一区二区三区四曲免费听| 国产成人天堂| 欧美亚洲一级在线观看| 九一亚洲国产免费| 2024黄色视频| 91色噜噜狠狠| 17c嫩草51久久91嫩草| 亚洲春色激情小说| 女优大全 - 91n| 中文字幕在线免费观看视频| 久久久熟女一区| 成人aⅴ一区二区三区| 在线97在线| 午夜啪啪片| 国产自偷| 日韩欧美视频青青| 久久国产精品m码| 日本不卡高清免v欧美日韩在线观看| 在线可观看的黄色网址| 国产乱不卡| 久久精品女同亚洲女同13| 久久一二三四五六七八九区区区| 久久日韩肥臀| 精品人妻一区二区免费蜜桃| 在线A日本| 风间由美日韩欧美久久| 日韩AV中文字幕电影| 五十路三级片| 99夜夜操| 久久大陆| 超碰97精品在线| 无码精品久久| 天堂伊人久久| 可以看的av| 无码一区二区精品视频久久久春药 | 亚洲一区中文精品| 加勒比性爱成人在线| 亚洲成av人片色午夜乱码| 国产在线能看的你懂的| 亚洲城人男人的天堂| 牛牛操视频逼| 国产区日韩区在线观看| 欧美热图99| 日韩性爱一级片| 夜夜高潮夜夜爽| 欧美性爱18观看| 好屌色综合| 欧美亚洲日本激情在线| 夜夜久久久| 欧亚洲精品有视频| 香蕉欧美| 精品亚州18| 怡红院一区二区熟女人妻| 韩日欧亚a级| 欧美中文字幕男人天堂久久精品| 男插女青青影院| 亚洲欧洲色情高清| 日韩欧美字幕亚洲一区二区| 国内外激情在线| 亚州情色j区| ,成人免费啪啪视频| 亚州九九九精品视频| 九九99精品| 天天上日日上日韩精品| 草久久久| 7777欧美成是人在线观看| 久久东京热久久| 久久精品72| 熟女突然公开看18禁影片 | 天天干人人干天天日97| 欧美丝袜亚洲| 亚洲不卡不卡中文字幕不卡 | 超碰天天久久79| 日本在线播放不卡一区| 久久超碰97| 99re6国产精品99re| av天堂影视中文在字幕在线中文 | 免费夜夜爱黄色视频毛片| 妇女性内射冈站HDWWWCOM| 97在线欧| 99国产在线绯色一区| 在线性黄高清免费视频| 久草尤物| 四虎在线视频| 成人在线午夜视频一区| 天天综合~91入口| 手机在线看片免费人成视频| 超碰97久久| 国产尤物在线三区| 白 大 人妻 区 在线| 久久草草欧美精品| 天天做日日做天天欢。| 沈阳熟女高潮对白视频| yazhououmeizongya| 麻豆 亚洲 97| http://qxhbdz.com| 国产激情片在线观看| 亚洲成人性爱网站在线播放| 中欧人妻丝袜中文字幕| 无卡一区=区| 欧美日本天堂| 2001天天操| 成人熟女区| 高清不卡国产| 久久午夜伦| 影音先锋国产精品| 亚洲天堂中文字| CCYY草草影院地址入口| 好吊色青靑草| 欧美中日韩XXXX| 97超碰色中文字幕| 美女AV一区二区| 色综合加勒比四四季| 久久人人妻| 免费观看欧美日韩操逼视频| 日日碰狠狠添天天爽超| 日韩色| 天天干天天燥| 亚洲熟女乱色一区二区三区| 少妇久久久久久| 美女久久久久久久久久久| 欧美日韩亚洲少妇寂寞影院正在播放 | 久超碰这里只有精品| 色悠久久久av| 欧美最大综合网| 超碰久在线天天做| 欧美熟妇亚洲版| 久久伊人青青草| 嗯嗯啊啊好疼| 1204av韩国| 9999亚洲电影| 久久爱超碰网| 素人无码中文字幕| 校园春色中文字幕AV| 97频视在线| 久草线上视频免费看| 伊人在线大香蕉视频久久| 果冻传媒A片一二三区| 国产一| 少妇熟女视频一二三区| 亚洲欧美激情小说| 日本在线999| 丰满人妻一区二区三区四区| 男女国产精品| 久热一区二区| 日本精品一级二级三级| 在线人成亚洲视频免费观看| 国产美女销魂在线观看不卡| 国产精品黄色三级av| 国精精品无码一二三区水多多| 亚洲成人一二三区|