您的位置:68399皇家赌场 > 虚拟主机 > MySQL线程处于Waiting for table flush的辨析,mysqlflus

MySQL线程处于Waiting for table flush的辨析,mysqlflus

发布时间:2019-05-12 14:35编辑:虚拟主机浏览(97)

    You can turn off this feature to get a quicker startup with -A

    MySQL线程处于Waiting for table flush的深入分析,mysqlflush

     

    近些日子际遇一个案例,大多查询被堵塞未有回来结果,使用show processlist查看,发掘众多MySQL线程处于Waiting for table flush状态,查询语句一向被封堵,只好通过Kill进度来消除。那么我们先来看看Waiting for table flush的法定解释:

     

    Waiting for table flush

     

    The thread is executing FLUSH TABLES and is waiting for all threads to close their tables, or the thread got a notification that the underlying structure for a table has changed and it needs to reopen the table to get the new structure. However, to reopen the table, it must wait until all other threads have closed the table in question.

    This notification takes place if another thread has used FLUSH TABLES or one of the following statements on the table in question: FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, or OPTIMIZE TABLE.

     

     

    那即是说我们接下去模拟一下线程处于Waiting for table flush状态的情景,如所示:

     

    在第二个会话连接(connection id=一三)中,我们使用lock table 锁定表test。 

     

    mysql> use MyDB;
    
    Database changed
    
    mysql> select connection_id();
    
     ----------------- 
    
    | connection_id() |
    
     ----------------- 
    
    |              13 |
    
     ----------------- 
    
    1 row in set (0.00 sec)
    
     
    
    mysql> lock table test read;
    
    Query OK, 0 rows affected (0.00 sec)
    
     
    
    mysql> 
    

     

     

     

    在其次个会话连接(connection id=一柒)中,大家实施flush table 或 flush table test 皆可。此时你会意识flush table处于阻塞状态。

     

    mysql> use MyDB;
    
    Reading table information for completion of table and column names
    
    You can turn off this feature to get a quicker startup with -A
    
     
    
    Database changed
    
    mysql> select connection_id();
    
     ----------------- 
    
    | connection_id() |
    
     ----------------- 
    
    |              17 |
    
     ----------------- 
    
    1 row in set (0.00 sec)
    
     
    
    mysql> flush table test;
    

     

     

     

     

    在第三个会话/连接中,当您切换来MyDB时,就能提示“You can turn off this feature to get a quicker startup with -A” ,此时地处阻塞状态。此时您退出会话,使用参数-A登6数据库后,你假使查询test表,就能够处在阻塞状态(理所当然查询别的表不会被堵塞)。如下所示:

     

    mysql> use MyDB;

    Reading table information for completion of table and column names

    You can turn off this feature to get a quicker startup with -A

     

     

    mysql> use MyDB;

    Database changed

    mysql> select * from test;

     

     

     

    在第5个会话/连接,大家用show processlist查看到最近数据库全部连接线程状态,你会看出一柒、1捌都远在Waiting for table flush的情况。如下截图所示:

     

    mysql> show processlist;
    
     ---- ------ ----------- ------ --------- ------ ------------------------- -------------------- 
    
    | Id | User | Host      | db   | Command | Time | State                   | Info               |
    
     ---- ------ ----------- ------ --------- ------ ------------------------- -------------------- 
    
    | 13 | root | localhost | MyDB | Sleep   |   90 |                         | NULL               |
    
    | 14 | root | localhost | NULL | Query   |    0 | init                    | show processlist   |
    
    | 17 | root | localhost | MyDB | Query   |   52 | Waiting for table flush | flush table test   |
    
    | 18 | root | localhost | MyDB | Query   |    9 | Waiting for table flush | select * from test |
    
     ---- ------ ----------- ------ --------- ------ ------------------------- -------------------- 
    
    4 rows in set (0.00 sec)
    
     
    
    mysql> 
    

     

     

    mysql> show processlist;
    
     ---- ------ ----------- ------ --------- ------ ------------------------- -------------------- 
    
    | Id | User | Host      | db   | Command | Time | State                   | Info               |
    
     ---- ------ ----------- ------ --------- ------ ------------------------- -------------------- 
    
    | 13 | root | localhost | MyDB | Sleep   |   90 |                         | NULL               |
    
    | 14 | root | localhost | NULL | Query   |    0 | init                    | show processlist   |
    
    | 17 | root | localhost | MyDB | Query   |   52 | Waiting for table flush | flush table test   |
    
    | 18 | root | localhost | MyDB | Query   |    9 | Waiting for table flush | select * from test |
    
     ---- ------ ----------- ------ --------- ------ ------------------------- -------------------- 
    
    4 rows in set (0.00 sec)
    
     
    
    mysql> 
    
    mysql> 
    
    mysql> 
    
    mysql> 
    
    mysql> show open tables where in_use >=1;
    
     ---------- ------- -------- ------------- 
    
    | Database | Table | In_use | Name_locked |
    
     ---------- ------- -------- ------------- 
    
    | MyDB     | test  |      1 |           0 |
    
     ---------- ------- -------- ------------- 
    
    1 row in set (0.00 sec)
    
     
    
    mysql> kill 17;
    
    Query OK, 0 rows affected (0.00 sec)
    
     
    
    mysql> show processlist;
    
     ---- ------ ----------- ------ --------- ------ ------------------------- -------------------- 
    
    | Id | User | Host      | db   | Command | Time | State                   | Info               |
    
     ---- ------ ----------- ------ --------- ------ ------------------------- -------------------- 
    
    | 13 | root | localhost | MyDB | Sleep   |  442 |                         | NULL               |
    
    | 14 | root | localhost | NULL | Query   |    0 | init                    | show processlist   |
    
    | 18 | root | localhost | MyDB | Query   |  361 | Waiting for table flush | select * from test |
    
     ---- ------ ----------- ------ --------- ------ ------------------------- -------------------- 
    
    3 rows in set (0.00 sec)
    
     
    
    mysql> kill 13;
    
    Query OK, 0 rows affected (0.00 sec)
    
     
    
    mysql> show processlist;
    
     ---- ------ ----------- ------ --------- ------ ------- ------------------ 
    
    | Id | User | Host      | db   | Command | Time | State | Info             |
    
     ---- ------ ----------- ------ --------- ------ ------- ------------------ 
    
    | 14 | root | localhost | NULL | Query   |    0 | init  | show processlist |
    
    | 18 | root | localhost | MyDB | Sleep   |  427 |       | NULL             |
    
     ---- ------ ----------- ------ --------- ------ ------- ------------------ 
    
    2 rows in set (0.00 sec)
    
     
    
    mysql> 
    

     

    |

     

    在意:我们须要Kill线程1三, Kill掉线程一七是解决不了难题的。

     

     

     

    生产条件中,许多时候恐怕不是lock table read引起的封堵,而是由于慢查询,导致flush table从来不可能关闭该表而一向处于等候情况,比如下边测试案例中,作者动用同一张大表做笛Carl积模拟3个慢查询,别的操作同样,如下所示,你会看出同第二行业生了Waiting for table flush

     

    mysql> SELECT T.* FROM TEST1 T, TEST1 L;

     

     

     

    其余,网络有个案例,mysqldump备份时,倘若未有运用参数—single-transaction 或由于同时利用了flush-logs与—single-transaction八个参数也可能引起这么的等候场景,那个四个参数放在一块儿,会在开端dump数据从前先进行三个FLUSH TABLES操作。

     

     

     

    减轻方案:

    ** 

     

    并发Waiting for table flush时,大家一般必要找到那个表被lock住或那么些慢查询导致flush table平昔在等候而不大概关闭该表。然后Kill掉对应的线程就能够,然则如何精准定位是二个挑衅,尤其是生育境遇,你使用show processlist会看到多量的线程。让您头眼昏花的,怎么转眼定位难题呢?

     

    对此慢查询引起的别的线程处于Waiting for table flush状态的情景:

     

    能够查阅show processlist中Time值极大的线程。然后甄别确认后Kill掉,如上截图所示,会话连接1四正是引起短路的源流SQL。有种规律就是其壹线程的Time列值必定比被封堵的线程要高。这几个就能够过滤多数记录。

     

    对于lock table read引起的其余线程处于Waiting for table flush状态的情状:

     

    对于实验中利用lock table read这种情形,这种对话只怕处于Sleep状态,而且它也不会合世在show engine innodb status G命令的输出消息中。 固然show open tables where in_use >=①;能找到是那张表被lock住了,然而十分的小概牢固到具体的线程(连接),其实那些是二个讨厌的主题素材。不过inntop那款利器就能够一定到,如下所示,线程壹7锁住了表test,在innotop里面就能够定点到是线程壹七。所谓工欲善其事必先利其器!

     

     

     

     

     

    其余,在法定文书档案中ALTE陆风X8 TABLE, RENAME TABLE, REPAIEscort TABLE, ANALYZE TABLE, or OPTIMIZE TABLE都能唤起那类等待,下边也做了部分轻巧测试,如下所示:

     

     

     

    Waiting for table flush的别的一个景色

     

    对话连接(connection id=1八)推行上边SQL语句,模拟一个慢查询SQL

     

    mysql> select connection_id();
    
     ----------------- 
    
    | connection_id() |
    
     ----------------- 
    
    |              18 |
    
     ----------------- 
    
    1 row in set (0.00 sec)
    
     
    
    mysql> select name, sleep(64) from test;
    

     

    对话连接(connection id=6)施行上边SQL语句,深入分析表test

     

    mysql> select connection_id();
    
     ----------------- 
    
    | connection_id() |
    
     ----------------- 
    
    |               6 |
    
     ----------------- 
    
    1 row in set (0.00 sec)
    
    mysql> analyze table test;
    
     ----------- --------- ---------- ---------- 
    
    | Table     | Op      | Msg_type | Msg_text |
    
     ----------- --------- ---------- ---------- 
    
    | MyDB.test | analyze | status   | OK       |
    
     ----------- --------- ---------- ---------- 
    
    1 row in set (0.04 sec)
    
     
    
    mysql> 
    

     

    对话连接(connection id=八)推行上边SQL语句

     

    mysql> select connection_id();
    
     ----------------- 
    
    | connection_id() |
    
     ----------------- 
    
    |               8 |
    
     ----------------- 
    
    1 row in set (0.00 sec)
    
     
    
    mysql> select * from test;
    

     

    翻开线程的事态,你会意识被卡住的对话处于 Waiting for table flush状态。 因为当对表做了ANALYZE TABLE后,后台针对该表的查询必要等待,因为MySQL已经济检察测到该表内部变化,必要采取FLUSH TABLE关闭然后再次张开该表,所以当您询问该表时,就能处于 Waiting for table flush

     

    mysql> show processlist;
    
     ---- ------ ----------- ------ --------- ------ ------------------------- ---------------------------------- 
    
    | Id | User | Host      | db   | Command | Time | State                   | Info                             |
    
     ---- ------ ----------- ------ --------- ------ ------------------------- ---------------------------------- 
    
    |  6 | root | localhost | MyDB | Sleep   |   22 |                         | NULL                             |
    
    |  8 | root | localhost | MyDB | Query   |   14 | Waiting for table flush | select * from test               |
    
    | 15 | root | localhost | NULL | Sleep   |    3 |                         | NULL                             |
    
    | 16 | root | localhost | NULL | Query   |    0 | init                    | show processlist                 |
    
    | 18 | root | localhost | MyDB | Query   |   46 | User sleep              | select name, sleep(64) from test |
    
     ---- ------ ----------- ------ --------- ------ ------------------------- ---------------------------------- 
    
    5 rows in set (0.00 sec)
    
     
    
    mysql> 
    

     

     

     

     

    Waiting for table metadata lock

     

     

    对话连接(connection id=一七)实行下边SQL语句,模拟二个慢查询SQL

     

     

    mysql> select connection_id();
    
     ----------------- 
    
    | connection_id() |
    
     ----------------- 
    
    |              17 |
    
     ----------------- 
    
    1 row in set (0.00 sec)
    
     
    
    mysql> select name, sleep(100) from test;
    

     

     

    对话连接(connection id=陆)实践下边SQL语句, 修改表结构操作

     

    mysql> select connection_id();
    
     ----------------- 
    
    | connection_id() |
    
     ----------------- 
    
    |               6 |
    
     ----------------- 
    
    1 row in set (0.00 sec)
    
     
    
    mysql> alter table test add tname varchar(10); // rename table test to kkk 同样会引起Waiting for table metadata lock
    

     

     

    对话连接(connection id=捌)实施下面SQL语句,查询表test

     

    mysql> select connection_id();
    
     ----------------- 
    
    | connection_id() |
    
     ----------------- 
    
    |               8 |
    
     ----------------- 
    
    1 row in set (0.00 sec)
    
     
    
    mysql> select * from test;
    

     

     

    查阅线程的场馆,你会意识被打断的对话处于 Waiting for table metadata lock状态。

     

     

    mysql> show processlist;
    
     ---- ------ ----------- ------ --------- ------ --------------------------------- ---------------------------------------- 
    
    | Id | User | Host      | db   | Command | Time | State                           | Info                                   |
    
     ---- ------ ----------- ------ --------- ------ --------------------------------- ---------------------------------------- 
    
    |  6 | root | localhost | MyDB | Query   |   19 | Waiting for table metadata lock | alter table test add tname varchar(10) |
    
    |  8 | root | localhost | MyDB | Query   |    6 | Waiting for table metadata lock | select * from test                     |
    
    | 15 | root | localhost | NULL | Sleep   |    8 |                                 | NULL                                   |
    
    | 16 | root | localhost | NULL | Query   |    0 | init                            | show processlist                       |
    
    | 17 | root | localhost | MyDB | Query   |   55 | User sleep                      | select name, sleep(100) from test      |
    
     ---- ------ ----------- ------ --------- ------ --------------------------------- ---------------------------------------- 
    
    5 rows in set (0.00 sec)
    
     
    
    mysql> 
    

     

     

     

     

     

    参照他事他说加以考察资料:

     

    for table flush的剖判,mysqlflush 近期遇到三个案例,诸多询问被卡住未有回到结果,使用show processlist查看,开采多数MySQL线...

    The thread is processing an ALTER TABLE statement, has created the new table, and is renaming it to replace the original table.

    mysql> show processlist;
    
     ---- ------ ----------- ------ --------- ------ ------------------------- ---------------------------------- 
    
    | Id | User | Host      | db   | Command | Time | State                   | Info                             |
    
     ---- ------ ----------- ------ --------- ------ ------------------------- ---------------------------------- 
    
    |  6 | root | localhost | MyDB | Sleep   |   22 |                         | NULL                             |
    
    |  8 | root | localhost | MyDB | Query   |   14 | Waiting for table flush | select * from test               |
    
    | 15 | root | localhost | NULL | Sleep   |    3 |                         | NULL                             |
    
    | 16 | root | localhost | NULL | Query   |    0 | init                    | show processlist                 |
    
    | 18 | root | localhost | MyDB | Query   |   46 | User sleep              | select name, sleep(64) from test |
    
     ---- ------ ----------- ------ --------- ------ ------------------------- ---------------------------------- 
    
    5 rows in set (0.00 sec)
    
     
    
    mysql> 
    

    The query was using SELECT DISTINCT in such a way that MySQL could not optimize away the distinct operation at an early stage. Because of this, MySQL requires an extra stage to remove all duplicated rows before sending the result to the client.

     

    Removing duplicates

     

    The thread is processing a SELECT that is resolved using an internal temporary table.

    This notification takes place if another thread has used FLUSH TABLES or one of the following statements on the table in question: FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, or OPTIMIZE TABLE.

    Reopen tables

    mysql> use MyDB;

    The thread is calculating a MyISAM table key distributions (for example, for ANALYZE TABLE).

     

    The server is copying to a temporary table in memory.

     

    Writing to net

     

    Creating index

     

    Locked

    查看线程的情形,你会意识被打断的对话处于 Waiting for table flush状态。 因为当对表做了ANALYZE TABLE后,后台针对该表的询问须求等待,因为MySQL已经济检察测到该表内部变化,供给选择FLUSH TABLE关闭然后再一次张开该表,所以当您询问该表时,就能处于 Waiting for table flush

    preparing

    mysql> show processlist;
    
     ---- ------ ----------- ------ --------- ------ --------------------------------- ---------------------------------------- 
    
    | Id | User | Host      | db   | Command | Time | State                           | Info                                   |
    
     ---- ------ ----------- ------ --------- ------ --------------------------------- ---------------------------------------- 
    
    |  6 | root | localhost | MyDB | Query   |   19 | Waiting for table metadata lock | alter table test add tname varchar(10) |
    
    |  8 | root | localhost | MyDB | Query   |    6 | Waiting for table metadata lock | select * from test                     |
    
    | 15 | root | localhost | NULL | Sleep   |    8 |                                 | NULL                                   |
    
    | 16 | root | localhost | NULL | Query   |    0 | init                            | show processlist                       |
    
    | 17 | root | localhost | MyDB | Query   |   55 | User sleep                      | select name, sleep(100) from test      |
    
     ---- ------ ----------- ------ --------- ------ --------------------------------- ---------------------------------------- 
    
    5 rows in set (0.00 sec)
    
     
    
    mysql> 
    

    copy to tmp table

     

    updating reference tables

     

    updating main table

     

    The thread has begun executing a statement.

    mysql> select connection_id();
    
     ----------------- 
    
    | connection_id() |
    
     ----------------- 
    
    |               6 |
    
     ----------------- 
    
    1 row in set (0.00 sec)
    
    mysql> analyze table test;
    
     ----------- --------- ---------- ---------- 
    
    | Table     | Op      | Msg_type | Msg_text |
    
     ----------- --------- ---------- ---------- 
    
    | MyDB.test | analyze | status   | OK       |
    
     ----------- --------- ---------- ---------- 
    
    1 row in set (0.04 sec)
    
     
    
    mysql> 
    

    Sorting index

    能够查看show processlist中Time值异常的大的线程。然后甄别确认后Kill掉,如上截图所示,会话连接1四正是挑起短路的源流SQL。有种规律便是这些线程的Time列值必定比被封堵的线程要高。那几个就能够过滤诸多笔录。

    The thread is writing a statement to the slow-query log.

     

    Flushing tables

     

    deleting from main table

    mysql> show processlist;
    
     ---- ------ ----------- ------ --------- ------ ------------------------- -------------------- 
    
    | Id | User | Host      | db   | Command | Time | State                   | Info               |
    
     ---- ------ ----------- ------ --------- ------ ------------------------- -------------------- 
    
    | 13 | root | localhost | MyDB | Sleep   |   90 |                         | NULL               |
    
    | 14 | root | localhost | NULL | Query   |    0 | init                    | show processlist   |
    
    | 17 | root | localhost | MyDB | Query   |   52 | Waiting for table flush | flush table test   |
    
    | 18 | root | localhost | MyDB | Query   |    9 | Waiting for table flush | select * from test |
    
     ---- ------ ----------- ------ --------- ------ ------------------------- -------------------- 
    
    4 rows in set (0.00 sec)
    
     
    
    mysql> 
    

    Aborted_clients 由于客户未有科学关闭连接已经死掉,已经扬弃的连年数量。 
    Aborted_connects 尝试已经停业的MySQL服务器的连接的次数。 
    Connections 试图连接MySQL服务器的次数。 
    Created_tmp_tables 当试行语句时,已经被创设了的包蕴临时表的数量。 
    Delayed_insert_threads 正在使用的推迟插入Computer线程的多少。 
    Delayed_writes 用INSERT DELAYED写入的行数。 
    Delayed_errors 用INSERT DELAYED写入的产生一些错误(大概再也键值)的行数。 
    Flush_commands 施行FLUSH命令的次数。 
    Handler_delete 请求从一张表中剔除行的次数。 
    Handler_read_first 请求读入表中率先行的次数。 
    Handler_read_key 请求数字基于键读行。 
    Handler_read_next 请求读入基于贰个键的一行的次数。 
    Handler_read_rnd 请求读入基于三个稳住地方的一条龙的次数。 
    Handler_update 请求更新表中1行的次数。 
    Handler_write 请求向表中插入壹行的次数。 
    Key_blocks_used 用于入眼字缓存的块的数据。 
    Key_read_requests 请求从缓存读入二个键值的次数。 
    Key_reads 从磁盘物理读入1个键值的次数。 
    Key_write_requests 请求将一个根本字块写入缓存次数。 
    Key_writes 将三个键值块物理写入磁盘的次数。 
    Max_used_connections 同时使用的总是的最大数目。 
    Not_flushed_key_blocks 在键缓存中曾经济体改造只是还没被清空到磁盘上的键块。 
    Not_flushed_delayed_rows 在INSERT DELAY队列中等待写入的行的多寡。 
    Open_tables 张开表的数目。 
    Open_files 张开文件的数额。 
    Open_streams 展开流的多寡(主要用来日志记载) 
    Opened_tables 已经开拓的表的数目。 
    Questions 发往服务器的询问的数额。 
    Slow_queries 要花超越long_query_time时间的询问数量。 
    Threads_connected 当前展开的连天的数额。 
    Threads_running 不在睡眠的线程数量。 
    Uptime 服务器专业了有一点点秒。

     

    end

     

    User lock

    在第7个会话/连接中,当您切换来MyDB时,就能够唤醒“You can turn off this feature to get a quicker startup with -A” ,此时处于阻塞状态。此时您退出会话,使用参数-A登入数据库后,你若是查询test表,就能够处在阻塞状态(当然查询其余表不会被打断)。如下所示:

    rename

    对话连接(connection id=八)试行上边SQL语句

    The thread is performing a table check operation.

    mysql> SELECT T.* FROM TEST1 T, TEST1 L;

    statistics

    澳门皇家赌场55533网址 1

    After create

     

    The thread is doing a sort to satisfy a GROUP BY.

     

    The server is writing a packet to the network.

    ** 

    logging slow query

    对话连接(connection id=陆)施行上边SQL语句, 修改表结构操作

    本语句报告TCP/IP连接的主机名称(选用host_name:client_port澳门皇家赌场55533网址,格式),以有利于地认清哪些客户放正在做哪些。

    | 澳门皇家赌场55533网址 2

    The thread has processed one command and is preparing to free memory and reset certain state variables.

     

    This occurs before the initialization of ALTER TABLE, DELETE, INSERT, SELECT, or UPDATE statements.

    对话连接(connection id=陆)实行下边SQL语句,分析表test

    The thread is beginning an ALTER TABLE operation.

    Repair with keycache

    Waiting for table flush的其余3个意况

    The thread is processing rows for a SELECT statement and also is sending data to the client.

     

    kill命令使用办法

    对话连接(connection id=1八)实行上面SQL语句,模拟三个慢查询SQL

    Repair done

    澳门皇家赌场55533网址 3

    rename result table

     

    本条命令中最器重的正是state列,mysql列出的意况首要有以下二种:

     

    Checking table

    并发Waiting for table flush时,大家一般需求找到那多少个表被lock住或那么些慢查询导致flush table一贯在守候而无法关闭该表。然后Kill掉对应的线程就可以,但是什么精准定位是三个挑衅,非常是生产条件,你使用show processlist会看到大量的线程。让您眼花缭乱的,怎么转眼定位难题呢?

    如上例中大家想kill掉id为20柒的线程则施行

    生产境遇中,很多时候恐怕不是lock table read引起的堵截,而是由于慢查询,导致flush table平素不可能关闭该表而直接处在等候状态,举例上面测试案例中,笔者动用同一张大表做笛Carl积模拟贰个慢查询,其余操作同样,如下所示,你会看出同样发生了Waiting for table flush

    mysql 查看当前连接数

    对于慢查询引起的其它线程处于Waiting for table flush状态的境况:

    Copying to group table

     

    The next thread state after System lock. The thread has acquired an external lock and is going to request an internal table lock.

    mysql> select connection_id();
    
     ----------------- 
    
    | connection_id() |
    
     ----------------- 
    
    |               8 |
    
     ----------------- 
    
    1 row in set (0.00 sec)
    
     
    
    mysql> select * from test;
    

    Repair by sorting

    除此以外,在官方文档中ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, or OPTIMIZE TABLE都能唤起那类等待,上面也做了有些简短测试,如下所示:

    The thread is going to request or is waiting for an advisory lock requested with a GET_LOCK() call. For SHOW PROFILE, this state means the thread is requesting the lock (not waiting for it).

     

    The server is reading a packet from the network.

    mysql> use MyDB;

    The initial state for a connection thread until the client has been authenticated successfully.

    本文由68399皇家赌场发布于虚拟主机,转载请注明出处:MySQL线程处于Waiting for table flush的辨析,mysqlflus

    关键词: 68399皇家赌场

上一篇:【mysql】关于ICP、M奥德赛翼虎、BKA等个性

下一篇:没有了