精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

為什么阿里不建議MySQL使用text類型?

數據庫 MySQL
下面就從text類型的存儲結構,引發的問題解釋下為什么不建議使用text類型,以及text改造的建議方法。

 前言

眾所周知,MySQL廣泛應用于互聯網的OLTP(聯機事務處理過程)業務系統中,在大廠開發規范中,經常會看到一條“不建議使用text大字段類型”。

下面就從text類型的存儲結構,引發的問題解釋下為什么不建議使用text類型,以及text改造的建議方法。

背景

寫log表導致DML慢

1)問題描述

某歪有一個業務系統,使用RDS for MySQL 5.7的高可用版本,配置long_query_time=1s,添加慢查詢告警,我第一反應就是某歪又亂點了。

我通過監控看CPU, QPS,TPS等指標不是很高,最近剛好雙十一全站都在做營銷活動,用戶量稍微有所增加。某歪反饋有些原本不慢的接口變的很慢,影響了正常的業務,需要做一下troubleshooting。

2)問題分析

我從慢查詢告警,可以看到有一些insert和update語句比較慢,同時告警時段的監控,發現IOPS很高,達到了70MB/s左右,由于RDS的CloundDBA功能不可用,又沒有audit log功能,troubleshooting比較困難,硬著頭皮只能分析binlog了。

配置了max_binlog_size =512MB,在IOPS高的時段里,看下binlog的生成情況。

需要分析為什么binlog寫這么快,最有可能原因就是insert into request_log表上有text類型,request_log表結構如下(demo) 

  1. CREATE TABLE request_log (`  
  2.  `id bigint(20) NOT NULL AUTO_INCREMENT,`  
  3.  `log text,`      
  4.  `created_at datetime NOT NULL,`  
  5.  `status tinyint(4) NOT NULL,`  
  6.  `method varchar(10) DEFAULT NULL,`  
  7.  `url varchar(50) DEFAULT NULL,`  
  8.  `update_at datetime DEFAULT NULL,`  
  9.  `running_time tinyint(4) DEFAULT '0',`  
  10.  `user_id bigint(20) DEFAULT NULL,`  
  11.  `type varchar(50) DEFAULT NULL,`  
  12.  `PRIMARY KEY (id)`  
  13. `) ENGINE=InnoDB AUTO_INCREMENT=4229611 DEFAULT CHARSET=utf8

分析binlog:

  1. $ mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin.000539|egrep "insert into request_log" 

滿屏幕都是看不清的內容,翻了半天沒翻完。

基本上已經確定是寫入request_log的log字段引起的,導致binlog_cache頻繁的flush,以及binlog過度切換,導致IOPS過高,影響了其他正常的DML操作。

3) 問題解決

跟開發同學溝通后,計劃在下一個版本修復這個問題,不再將request信息寫入表中,寫入到本地日志文件,通過filebeat抽取到es進行查詢,如果只是為了查看日志也可以接入grayLog等日志工具,沒必要寫入數據庫。

文章最后我還會介紹幾個MySQL 我踩過text相關的坑,這介紹坑之前我先介紹下MySQL text類型。

MySQL中的text

text類型

text是一個能夠存儲大量的數據的大對象,有四種類型:TINYTEXT, TEXT, MEDIUMTEXT,LONGTEXT,不同類型存儲的值范圍不同,如下所示:

Data Type Storage Required
TINYTEXT L + 1 bytes, where L < 2**8
TEXT L + 2 bytes, where L < 2**16
MEDIUMTEXT L + 3 bytes, where L < 2**24
LONGTEXT L + 4 bytes, where L < 2**32

其中L表是text類型中存儲的實際長度的字節數。可以計算出TEXT類型最大存儲長度2**16-1 = 65535 Bytes。

InnoDB數據頁

Innodb數據頁由以下7個部分組成:

內容 占用大小 說明
File Header 38Bytes 數據文件頭
Page Header 56 Bytes 數據頁頭
Infimun 和 Supermum Records   偽記錄
User Records   用戶數據
Free Space   空閑空間:內部是鏈表結構,記錄被delete后,會加入到free_lru鏈表
Page  Dictionary   頁數據字典:存儲記錄的相對位置記錄,也稱為Slot,內部是一個稀疏目錄
File Trailer 8Bytes 文件尾部:為了檢測頁是否已經完整個的寫入磁盤

說明:File Trailer只有一個FiL_Page_end_lsn部分,占用8字節,前4字節代表該頁的checksum值,最后4字節和File Header中的FIL_PAGE_LSN,一個頁是否發生了Corrupt,是通過File Trailer部分進行檢測,而該部分的檢測會有一定的開銷,用戶可以通過參數innodb_checksums開啟或關閉這個頁完整性的檢測。

從MySQL 5.6開始默認的表存儲引擎是InnoDB,它是面向ROW存儲的,每個page(default page size = 16KB),存儲的行記錄也是有規定的,最多允許存儲16K/2 - 200 = 7992行。

InnoDB的行格式

Innodb支持四種行格式:

由于Dynamic是Compact變異而來,結構大同而已,現在默認都是Dynamic格式;COMPRESSED主要是對表和索引數據進行壓縮,一般適用于使用率低的歸檔,備份類的需求,主要介紹下REDUNDANT和COMPACT行格式。

Redundant行格式

這種格式為了兼容舊版本MySQL。

行記錄格式:

具有以下特點:

  •  存儲變長列的前768 Bytes在索引記錄中,剩余的存儲在overflow page中,對于固定長度且超過768 Bytes會被當做變長字段存儲在off-page中;
  •  索引頁中的每條記錄包含一個6 Bytes的頭部,用于鏈接記錄用于行鎖;
  •  聚簇索引的記錄包含用戶定義的所有列。另外還有一個6字節的事務ID(DB_TRX_ID)和一個7字節長度的回滾段指針(Roll pointer)列;
  •  如果創建表沒有顯示指定主鍵,每個聚簇索引行還包括一個6字節的行ID(row ID)字段;
  •  每個二級索引記錄包含了所有定義的主鍵索引列;
  •  一條記錄包含一個指針來指向這條記錄的每個列,如果一條記錄的列的總長度小于128字節,這個指針占用1個字節,否則2個字節。這個指針數組稱為記錄目錄(record directory)。指針指向的區域是這條記錄的數據部分;
  •  固定長度的字符字段比如CHAR(10)通過固定長度的格式存儲,尾部填充空格;
  •  固定長度字段長度大于或者等于768字節將被編碼成變長的字段,存儲在off-page中;
  •  一個SQL的NULL值存儲一個字節或者兩個字節在記錄目錄(record dirictoty)。對于變長字段null值在數據區域占0個字節。對于固定長度的字段,依然存儲固定長度在數據部分,為null值保留固定長度空間允許列從null值更新為非空值而不會引起索引的分裂;
  •  對varchar類型,Redundant行記錄格式同樣不占用任何存儲空間,而CHAR類型的NULL值需要占用空間。

其中變長類型是通過長度 + 數據的方式存儲,不同類型長度是從1到4個字節(L+1 到 L + 4),對于TEXT類型的值需要L Bytes存儲value,同時需要2個字節存儲value的長度。同時Innodb最大行長度規定為65535 Bytes,對于text類型,只保存9到12字節的指針,數據單獨存在overflow page中。

Compact行格式

這種行格式比redundant格式減少了存儲空間作為代價,但是會增加某些操作的CPU開銷。如果系統workload是受緩存命中率和磁盤速度限制,compact行格式可能更快。如果你的工作負載受CPU速度限制,compact行格式可能更慢,Compact 行格式被所有file format所支持。

行記錄格式:

Compact首部是一個非NULL變長字段長度的列表,并且是按列的順序逆序放置的,若列的長度小于255字節,用1字節表示;若大于255個字節,用2字節表示。變長字段最大不可以超過2字節,這是因為MySQL數據庫中varchar類型最大長度限制為65535,變長字段之后的第二個部分是NULL標志位,表示該行數據是否有NULL值。有則用1表示,該部分所占的字節應該為1字節。

所以在創建表的時候,盡量使用NOT NULL DEFAULT '',如果表中列存儲大量的NULL值,一方面占用空間,另一個方面影響索引列的穩定性。

具有以下特點:

  •  索引的每條記錄包含一個5個字節的頭部,頭部前面可以有一個可變長度的頭部。這個頭部用來將相關連的記錄鏈接在一起,也用于行鎖;
  •  記錄頭部的變長部分包含了一個表示null 值的位向量(bit vector)。如果索引中可以為null的字段數量為N,這個位向量包含 N/8 向上取整的字節數。比例如果有9-16個字段可以為NULL值,這個位向量使用兩個字節。為NULL的列不占用空間,只占用這個位向量中的位。頭部的變長部分還包含了變長字段的長度。每個長度占用一個或者2個字節,這取決了字段的最大長度。如果所有列都可以為null 并且制定了固定長度,記錄頭部就沒有變長部分;
  • 對每個不為NULL的變長字段,記錄頭包含了一個字節或者兩個字節的字段長度。只有當字段存儲在外部的溢出區域或者字段最大長度超過255字節并且實際長度超過127個字節的時候會使用2個字節的記錄頭部。對應外部存儲的字段,兩個字節的長度指明內部存儲部分的長度加上指向外部存儲部分的20個字節的指針。內部部分是768字節,因此這個長度值為 768+20, 20個字節的指針存儲了這個字段的真實長度;
  •  NULL不占該部分任何空間,即NULL除了占用NULL標志位,實際存儲不占任何空間;
  •  記錄頭部跟著非空字段的數據部分;
  •  聚簇索引的記錄包含了所以用戶定于的字段。另外還有一個6字節的事務ID列和一個7字節的回滾段指針;
  •  如果沒有定于主鍵索引,則聚簇索引還包括一個6字節的Row ID列;

    每個輔助索引記錄包含為群集索引鍵定義的不在輔助索引中的所有主鍵列。如果任何一個主鍵列是可變長度的,那么每個輔助索引的記錄頭都有一個可變長度的部分來記錄它們的長度,即使輔助索引是在固定長度的列上定義的;

  •  固定長度的字符字段比如CHAR(10)通過固定長度的格式存儲,尾部填充空格;
  •  對于變長的字符集,比如uft8mb3和utf8mb4, InnoDB試圖用N字節來存儲 CHAR(N)。如果CHAR(N)列的值的長度超過N字節,列后面的空格減少到最小值。CHAR(N)列值的最大長度是最大字符編碼數 x N。比如utf8mb4字符集的最長編碼為4,則列的最長字節數是 4*N。

text類型引發的問題

插入text字段導致報錯

1)創建測試表 

  1. [root@barret] [test]>create table user(id bigint not null primary key auto_increment,   
  2.   -> name varchar(20) not null default '' comment '姓名',   
  3.   -> age tinyint not null default 0 comment 'age',   
  4.   -> gender char(1) not null default 'M' comment '性別',  
  5.   -> info text not null comment '用戶信息',  
  6.   -> create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',  
  7.   -> update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間'  
  8.   -> );  
  9. Query OK, 0 rows affected (0.04 sec) 

2)插入測試數據 

  1. root@barret] [test]>insert into user(name,age,gender,info) values('moon', 34, 'M', repeat('a',1024*1024*3));  
  2. ERROR 1406 (22001): Data too long for column 'info' at row 1 
  3. [root@barret] [test]>insert into user(name,age,gender,info) values('sky', 35, 'M', repeat('b',1024*1024*5));  
  4. ERROR 1301 (HY000): Result of repeat() was larger than max_allowed_packet (4194304) - truncated 

3)錯誤分析 

  1. [root@barret] [test]>select @@max_allowed_packet;  
  2. +----------------------+  
  3. | @@max_allowed_packet |  
  4. +----------------------+  
  5. |       4194304 |  
  6. +----------------------+  
  7. 1 row in set (0.00 sec) 

max_allowed_packet控制communication buffer最大尺寸,當發送的數據包大小超過該值就會報錯,我們都知道,MySQL包括Server層和存儲引擎,它們之間遵循2PC協議,Server層主要處理用戶的請求:連接請求—>SQL語法分析—>語義檢查—>生成執行計劃—>執行計劃—>fetch data;存儲引擎層主要存儲數據,提供數據讀寫接口。

max_allowed_packet=4M,當第一條insert repeat('a',1024*1024*3),數據包Server執行SQL發送數據包到InnoDB層的時候,檢查數據包大小沒有超過限制4M,在InnoDB寫數據時,發現超過了text的限制導致報錯。第二條insert的數據包大小超過限制4M,Server檢測不通過報錯。

引用AWS RDS參數組中該參數的描述: 

  1. max_allowed_packet:   This value by default is small, to catch large (possibly incorrect) packets. Must be increased if using large TEXT columns or long strings. As big as largest BLOB. 

增加該參數的大小可以緩解報錯,但是不能徹底的解決問題。

RDS實例被鎖定

1)背景描述

公司每個月都會做一些營銷活動,有個服務apush活動推送,單獨部署在高可用版的RDS for MySQL 5.7,配置是4C8G 150G磁盤,數據庫里也就4張表,晚上22:00下班走的時候,rds實例數據使用了50G空間,第二天早晨9:30在地鐵上收到釘釘告警短信,提示push服務rds實例由于disk is full被locked with —read-only,開發也反饋,應用日志報了一堆MySQL error。

2)問題分析

通過DMS登錄到數據庫,看一下那個表最大,發現有張表push_log占用了100G+,看了下表結構,里面有兩個text字段。 

  1. request text default '' comment '請求信息',  
  2. response text default '' comment '響應信息'  
  3. mysql>show  table status like 'push_log';  
  4. 發現Avg_row_length基本都在150KB左右,Rows = 78w,表的大小約為780000*150KB/1024/1024 = 111.5G。 

3)通過主鍵update也很慢 

  1. insert into user(name,age,gender,info) values('thooo', 35, 'M', repeat('c',65535);  
  2. insert into user(name,age,gender,info) values('thooo11', 35, 'M', repeat('d',65535);  
  3. insert into user(name,age,gender,info) select name,age,gender,info from user;  
  4. Query OK, 6144 rows affected (5.62 sec)  
  5. Records: 6144  Duplicates: 0  Warnings: 0       
  6. [root@barret] [test]>select count(*) from user;  
  7. +----------+  
  8. | count(*) |  
  9. +----------+  
  10. |    24576 |  
  11. +----------+  
  12. 1 row in set (0.05 sec) 

做update操作并跟蹤。 

  1. mysql> set profiling = 1 
  2. Query OK, 0 rows affected, 1 warning (0.00 sec)  
  3. mysql> update user set info = repeat('f',65535) where id = 11 
  4. Query OK, 1 row affected (0.28 sec)  
  5. Rows matched: 1  Changed: 1  Warnings: 0  
  6. mysql> show profiles;  
  7. +----------+------------+--------------------------------------------------------+  
  8. | Query_ID | Duration   | Query                                                  |  
  9. +----------+------------+--------------------------------------------------------+  
  10. |        1 | 0.27874125 | update user set info = repeat('f',65535) where id = 11 |  
  11. +----------+------------+--------------------------------------------------------+  
  12. 1 row in set, 1 warning (0.00 sec)  
  13. mysql> show profile cpu,block io for query 1;    
  14. +----------------------+----------+----------+------------+--------------+---------------+  
  15. | Status               | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |  
  16. +----------------------+----------+----------+------------+--------------+---------------+  
  17. | starting             | 0.000124 | 0.000088 |   0.000035 |            0 |             0 |  
  18. | checking permissions | 0.000021 | 0.000014 |   0.000006 |            0 |             0 |  
  19. | Opening tables       | 0.000038 | 0.000026 |   0.000011 |            0 |             0 |  
  20. | init                 | 0.000067 | 0.000049 |   0.000020 |            0 |             0 |  
  21. | System lock          | 0.000076 | 0.000054 |   0.000021 |            0 |             0 |  
  22. | updating             | 0.244906 | 0.000000 |   0.015382 |            0 |         16392 |  
  23. | end                  | 0.000036 | 0.000000 |   0.000034 |            0 |             0 |  
  24. | query end            | 0.033040 | 0.000000 |   0.000393 |            0 |           136 |  
  25. | closing tables       | 0.000046 | 0.000000 |   0.000043 |            0 |             0 |  
  26. | freeing items        | 0.000298 | 0.000000 |   0.000053 |            0 |             0 |  
  27. | cleaning up          | 0.000092 | 0.000000 |   0.000092 |            0 |             0 |  
  28. +----------------------+----------+----------+------------+--------------+---------------+  
  29. 11 rows in set, 1 warning (0.00 sec) 

可以看到主要耗時在updating這一步,IO輸出次數16392次,在并發的表上通過id做update,也會變得很慢。

4)group_concat也會導致查詢報錯

在業務開發當中,經常有類似這樣的需求,需要根據每個省份可以定點醫保單位名稱,通常實現如下: 

  1. select group_concat(dru_name) from t_drugstore group by province; 

其中內置group_concat返回一個聚合的string,最大長度由參數group_concat_max_len(Maximum allowed result length in bytes for the GROUP_CONCAT())決定,默認是1024,一般都太短了,開發要求改長一點,例如1024000。

當group_concat返回的結果集的大小超過max_allowed_packet限制的時候,程序會報錯,這一點要額外注意。

5)MySQL內置的log表

MySQL中的日志表mysql.general_log和mysql.slow_log,如果開啟審計audit功能,同時log_output=TABLE,就會有mysql.audit_log表,結構跟mysql.general_log大同小異。

分別看一下他們的表結構。 

  1. CREATE TABLE `general_log` (  
  2.   `event_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),  
  3.   `user_host` mediumtext NOT NULL,  
  4.   `thread_id` bigint(21) unsigned NOT NULL,  
  5.   `server_id` int(10) unsigned NOT NULL,  
  6.   `command_type` varchar(64) NOT NULL,  
  7.   `argument` mediumblob NOT NULL  
  8. ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'  
  1. CREATE TABLE `slow_log` (  
  2.   `start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),  
  3.   `user_host` mediumtext NOT NULL,  
  4.   `query_time` time(6) NOT NULL,  
  5.   `lock_time` time(6) NOT NULL,  
  6.   `rows_sent` int(11) NOT NULL,  
  7.   `rows_examined` int(11) NOT NULL, 
  8.   `db` varchar(512) NOT NULL,  
  9.   `last_insert_id` int(11) NOT NULL,  
  10.   `insert_id` int(11) NOT NULL,  
  11.   `server_id` int(10) unsigned NOT NULL,  
  12.   `sql_text` mediumblob NOT NULL,  
  13.   `thread_id` bigint(21) unsigned NOT NULL  
  14. ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' 

mysql.general_log記錄的是經過MySQL Server處理的所有的SQL,包括后端和用戶的,insert比較頻繁,同時argument mediumblob NOT NULL,對MySQL Server性能有影響的,一般我們在dev環境為了跟蹤排查問題,可以開啟general_log,Production環境禁止開啟general_log,可以開啟audit_log,它是在general_log的基礎上做了一些filter,比如我只需要業務賬號發起的所有的SQL,這個很有用的,很多時候需要分析某一段時間內哪個SQL的QPS,TPS比較高。

mysql.slow_log記錄的是執行超過long_query_time的所有SQL,如果遵循MySQL開發規范,slow query不會太多,但是開啟了log_queries_not_using_indexes=ON就會有好多full table scan的SQL被記錄,這時slow_log表會很大,對于RDS來說,一般只保留一天的數據,在頻繁insert into slow_log的時候,做truncate table slow_log去清理slow_log會導致MDL,影響MySQL穩定性。

建議將log_output=FILE,開啟slow_log, audit_log,這樣就會將slow_log,audit_log寫入文件,通過Go API處理這些文件將數據寫入分布式列式數據庫clickhouse中做統計分析。

text改造建議

使用ES存儲

在MySQL中,一般log表會存儲text類型保存request或response類的數據,用于接口調用失敗時去手動排查問題,使用頻繁的很低。可以考慮寫入本地log file,通過filebeat抽取到ES中,按天索引,根據數據保留策略進行清理。

使用對象存儲

有些業務場景表用到TEXT,BLOB類型,存儲的一些圖片信息,比如商品的圖片,更新頻率比較低,可以考慮使用對象存儲,例如阿里云的OSS,AWS的S3都可以,能夠方便且高效的實現這類需求。

總結

由于MySQL是單進程多線程模型,一個SQL語句無法利用多個cpu core去執行,這也就決定了MySQL比較適合OLTP(特點:大量用戶訪問、邏輯讀,索引掃描,返回少量數據,SQL簡單)業務系統,同時要針對MySQL去制定一些建模規范和開發規范,盡量避免使用text類型,它不但消耗大量的網絡和IO帶寬,同時在該表上的DML操作都會變得很慢。

另外建議將復雜的統計分析類的SQL,建議遷移到實時數倉OLAP中,例如目前使用比較多的clickhouse,里云的ADB,AWS的Redshift都可以,做到OLTP和OLAP類業務SQL分離,保證業務系統的穩定性。 

 

責任編輯:龐桂玉 來源: DBAplus社群
相關推薦

2020-11-09 09:46:27

MySQLText類型

2024-07-29 08:20:10

2023-09-21 10:50:23

MySQL數據庫

2021-08-04 17:20:30

阿里巴巴AsyncJava

2024-03-11 11:02:03

Date類JavaAPI

2020-11-17 09:01:09

MySQLDelete數據

2021-10-13 14:06:46

MySQLUtf8符號

2025-09-15 01:50:00

2025-05-16 02:00:00

HashMapJava代碼

2021-11-15 06:56:45

MyBatis開發項目

2024-12-05 08:16:32

2020-12-22 06:04:13

Python定時代碼

2020-12-24 18:46:11

Java序列化編程語言

2019-02-27 09:00:13

阿里巴巴for循環Java

2019-01-29 10:30:32

阿里巴巴Java字符串

2020-04-01 17:50:02

Python編程語言

2019-09-04 11:02:54

繼承層次組合

2020-06-23 14:09:49

枚舉JDK場景

2019-09-02 15:20:28

Java開發繼承

2024-11-12 10:30:54

Docker部署數據庫
點贊
收藏

51CTO技術棧公眾號

久久久久久久久免费视频| 国产又粗又爽视频| 综合伊人久久| 精品国产31久久久久久| 欧洲一区二区日韩在线视频观看免费| 久久精品久久久久久久| 日韩av片子| 欧美变态口味重另类| 亚洲国产精品久久久久婷蜜芽| 国产综合在线观看| 国产成人综合自拍| 日本一区二区不卡| 久久精品黄色片| 丝袜连裤袜欧美激情日韩| 欧美三级中文字| 日韩av中文字幕第一页| 国产高清美女一级毛片久久| 国产精品一二三在| 日韩女优人人人人射在线视频| 免费国产羞羞网站美图| 亚洲人成伊人成综合图片| 欧美疯狂做受xxxx富婆| 亚洲欧洲日产国码无码久久99| lutube成人福利在线观看| 成人美女在线视频| 国产精品无码专区在线观看| 日韩欧美亚洲视频| 综合在线视频| 伊人伊人伊人久久| 国产精品久久久久久亚洲色| 久久久久久久性潮| 色综合激情久久| 国产真人做爰毛片视频直播| 国产在线二区| 国产精品婷婷午夜在线观看| 久久伊人资源站| 国产小视频一区| 狠狠狠色丁香婷婷综合久久五月| 国产精品扒开腿做爽爽爽的视频| 日本免费观看视| 欧美日韩国产探花| 久久久av免费| 午夜黄色福利视频| 国产99精品一区| 欧美精品一区二区三区在线播放 | 717成人午夜免费福利电影| 成人在线看视频| 午夜av不卡| 偷拍亚洲欧洲综合| 成人在线观看你懂的| 黑人极品ⅴideos精品欧美棵| 亚洲日本在线天堂| 久久免费看毛片| 日本a级在线| 国产精品久线观看视频| 亚洲高清视频一区二区| 福利在线午夜| 国产精品美日韩| 亚洲在线欧美| 激情影院在线观看| 亚洲色图.com| 日韩人妻一区二区三区蜜桃视频| 毛片免费不卡| 亚洲免费视频中文字幕| 欧美精品久久96人妻无码| h网站久久久| 亚洲一区二区美女| 亚洲熟妇av日韩熟妇在线| 涩涩视频网站在线观看| 日韩欧美在线观看视频| caoporn超碰97| 亚洲欧美在线人成swag| 欧美一级夜夜爽| 日本久久久久久久久久| 日韩最新在线| 尤物yw午夜国产精品视频| 娇小11一12╳yⅹ╳毛片| 午夜久久免费观看| 欧美激情免费看| 国产成人免费观看视频| 日精品一区二区三区| 国产精品福利小视频| 国产精品羞羞答答在线| 成人黄色国产精品网站大全在线免费观看| 国产日韩三区| 福利片在线观看| 亚洲激情在线激情| 无码精品a∨在线观看中文| 外国电影一区二区| 欧美一区2区视频在线观看| 久久久久9999| 91亚洲人成网污www| 欧美激情视频在线免费观看 欧美视频免费一 | 热久久这里只有精品| 中文字幕av网站| 粉嫩蜜臀av国产精品网站| 欧美日韩在线精品一区二区三区| 免费av不卡| 欧美日韩在线一区| 小明看看成人免费视频| 日韩mv欧美mv国产网站| 色悠悠久久88| 日产亚洲一区二区三区| 麻豆精品精品国产自在97香蕉| 99热99热| 99riav在线| 精品久久久国产精品999| 亚洲综合色在线观看| 福利电影一区| 日韩在线资源网| 亚洲日本视频在线观看| 国产精品一品视频| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 国产盗摄精品一区二区酒店| 欧美日韩一区二区不卡| 国产精品无码毛片| 午夜久久影院| 国产精品欧美日韩一区二区| 天堂中文资源在线观看| 亚洲精品久久久久久国产精华液| 精品免费国产一区二区| 波多野结衣在线一区二区| 色偷偷88888欧美精品久久久| 日韩欧美亚洲视频| 国产精品一二二区| 亚洲精品中文字幕在线| 国产日韩电影| 亚洲第一区第二区| 亚洲国产成人精品综合99| 欧美aaa在线| 蜜桃日韩视频| 人在线成免费视频| 亚洲精品福利视频| 国产亚洲精品女人久久久久久| 加勒比av一区二区| 亚洲ai欧洲av| 日韩视频网站在线观看| 亚洲美女av在线| 国产成人无码一区二区三区在线| 国产精品一区二区在线播放| 这里只有精品66| 男女啪啪999亚洲精品| 亚洲欧洲日产国产网站| 亚洲永久精品在线观看| 99这里只有精品| 青青青免费在线| 精品国产导航| 18久久久久久| 天堂av电影在线观看| 舔着乳尖日韩一区| 99久久人妻精品免费二区| 亚洲国产精品一区| 国产一区二区高清不卡| 高清精品在线| 亚洲精品网站在线播放gif| 欧美一区二区激情视频| 久久精品免视看| 亚洲男人天堂色| 久久国产电影| 91久久在线播放| 啪啪免费视频一区| 精品久久久久久亚洲综合网 | 亚乱亚乱亚洲乱妇| 欧美日韩精品一区视频| 国产精品99久久久久久成人| 国产一区二区三区四区五区入口| 超碰97免费观看| 一区二区三区视频播放| 97在线视频一区| 黄网在线观看| 欧美日韩久久一区二区| 久久久精品视频免费观看| 成人爱爱电影网址| 日本中文字幕片| 区一区二视频| 国产日韩精品综合网站| 日本高清成人vr专区| 欧美精品一区二区三区蜜桃视频| 国产精品999在线观看| 国产欧美一区二区精品忘忧草 | 久久久久www| 国产v在线观看| 欧美日韩亚洲精品内裤| gv天堂gv无码男同在线观看 | 好吊日免费视频| 男人的天堂亚洲一区| 亚洲精品少妇一区二区| 日韩欧美黄色| 成人免费在线视频网址| 人人草在线视频| 久久精品亚洲国产| 偷拍25位美女撒尿视频在线观看| 国产一区不卡视频| 男女裸体影院高潮| 九九综合在线| 亚洲综合大片69999| 一个人www视频在线免费观看| 自拍视频国产精品| 欧美天堂在线视频| 欧美日韩电影一区| 福利一区二区三区四区| 中文欧美字幕免费| 日韩少妇一区二区| 久久99精品久久久久婷婷| 日日摸日日碰夜夜爽无码| 日本久久黄色| 久久精品国产第一区二区三区最新章节 | 激情国产在线| www.亚洲人.com| 你懂的视频在线播放| 日韩欧美一区中文| 中文区中文字幕免费看| 亚洲成人你懂的| 亚洲欧美综合7777色婷婷| 99国产欧美另类久久久精品| 国产5g成人5g天天爽| 日日摸夜夜添夜夜添精品视频| www.亚洲成人网| 日韩中文字幕高清在线观看| 欧美精品国产精品久久久| 一区二区三区国产好| 成人av色在线观看| 欧美大片免费高清观看| 97精品国产97久久久久久| 国产激情在线视频| 中文字幕亚洲欧美日韩2019| 视频二区在线| 精品精品欲导航| 国产免费一区二区三区最新不卡| 在线观看亚洲成人| 国产无套丰满白嫩对白| 亚洲电影一区二区三区| 曰本女人与公拘交酡| 亚洲天堂免费看| 国产视频不卡在线| 国产欧美日韩综合| 精品人伦一区二区三电影| 99精品视频在线观看| 亚洲少妇中文字幕| 粉嫩一区二区三区在线看| 手机在线观看日韩av| 日韩高清在线一区| 国产1区2区在线| 久久精品91| 久久国产色av免费观看| 日韩主播视频在线| 成人精品小视频| 久久一二三四| 日本va中文字幕| 日产国产欧美视频一区精品| 国产 porn| 日av在线不卡| 手机av在线免费| 国产一区二区女| 麻豆免费在线观看视频| 成人av综合一区| 亚洲天堂网一区二区| 国产午夜精品福利| 国产免费嫩草影院| 亚洲精品水蜜桃| 日韩美女黄色片| 色av成人天堂桃色av| 在线观看中文字幕网站| 91精品国产色综合久久不卡蜜臀 | 精品国产乱码一区二区三区| 91入口在线观看| 国产精品流白浆在线观看| 久久66热这里只有精品| 欧美日韩中文一区二区| 欧美爱爱视频网站| 亚洲高清在线| 日本www高清视频| 国产在线视频一区二区| 久久免费精品国产| 久久精品人人做人人爽人人| 黑人狂躁日本娇小| 亚洲mv在线观看| 色老头一区二区| 日韩一区二区视频| 美女做暖暖视频免费在线观看全部网址91 | 亚洲黄色免费在线观看| 久久亚洲欧美国产精品乐播 | 37p粉嫩大胆色噜噜噜| 久久久久久97三级| 女性裸体视频网站| 亚洲激情五月婷婷| 毛片视频网站在线观看| 色av成人天堂桃色av| 99草在线视频| 亚洲国产精品福利| 日本护士...精品国| 久久夜色精品国产亚洲aⅴ| 直接在线观看的三级网址| 久久久久久午夜| 久久久久久久性潮| 国产乱码一区| 九九热播视频在线精品6| 手机看片福利永久国产日韩| 91精品秘密在线观看| 国产黄色一级网站| 麻豆精品精品国产自在97香蕉| 中文字幕av一区二区三区人妻少妇| 91看片淫黄大片一级在线观看| 欧美波霸videosex极品| 一区二区久久久久久| 特级西西444www高清大视频| 日韩欧美国产电影| 蜜桃视频在线免费| 国外成人在线播放| 欧美黄色三级| 精品一区二区国产| 欧美日韩中文一区二区| 日韩a级在线观看| 九色porny丨国产精品| 久久久久久久无码| 亚洲人成网站精品片在线观看 | 九色在线免费| 欧美另类老女人| 成人久久网站| 日本高清一区| 好看不卡的中文字幕| 天天爽夜夜爽一区二区三区| 26uuu国产电影一区二区| 91香蕉视频污在线观看| 欧美性猛交xxxx| 精品二区在线观看| 中文字幕亚洲欧美一区二区三区 | 国产欧美日韩专区发布| 久久久免费毛片| 亚洲熟妇无码av在线播放| 美女网站视频久久| 成人做爰69片免费| 一区二区三区四区精品在线视频| 香蕉污视频在线观看| 亚洲女人天堂视频| av丝袜在线| 亚洲自拍欧美色图| 欧美a级片网站| mm131国产精品| 国产精品久久久久久久蜜臀| 草久久免费视频| 亚洲福利在线观看| 97人人在线视频| 超碰97国产在线| 日韩大片在线| 国产福利影院在线观看| 久久一二三国产| 青青草视频在线观看免费| 亚洲精品福利免费在线观看| 激情网站在线| 国产一级特黄a大片99| 欧美日本中文| 国产高清成人久久| 亚洲成人综合在线| 天天操天天干天天干| 国模精品视频一区二区| 999在线精品| 欧美极品少妇无套实战| 国产美女精品人人做人人爽 | 亚洲欧美一级二级三级| 污污视频在线免费| 亚洲欧美一区二区不卡| 亚洲第一天堂网| 国内精品久久久久| 视频一区中文| 亚洲这里只有精品| 国产精品二三区| 空姐吹箫视频大全| 国内精品美女av在线播放| 亚洲永久精品唐人导航网址| 日本在线观看a| 26uuu国产一区二区三区| www.亚洲激情| 日韩中文字幕免费看| 日本一区影院| 日本a在线免费观看| 欧美国产欧美亚州国产日韩mv天天看完整| 天天干,天天干| 色七七影院综合| 国内精品偷拍| 37pao成人国产永久免费视频| 中文字幕一区二区三区乱码在线| 国产精品日韩无码| 美女福利视频一区| 人妖一区二区三区| 91视频免费版污| 亚洲综合色噜噜狠狠| 偷拍25位美女撒尿视频在线观看| 国产欧美中文字幕| 欧美日韩视频一区二区三区| 无码人妻一区二区三区在线| 欧美在线一区二区三区| 日本精品一区二区三区在线播放| 国产精品免费一区二区三区在线观看 | 国产传媒日韩欧美成人| 五月婷婷亚洲综合| 久久中文字幕一区| 欧美日韩导航| 中文字幕第88页| 精品久久久香蕉免费精品视频|