您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

mysql use db后很卡解决_MySQL

2024/2/20 5:33:55发布20次查看
bitscn.com
mysql use db后很卡解决
平时自己使用的一台mysql,use db之后,总是感觉很卡,按完回车要快1s才能返回。觉得有什么蹊跷,就打开了general log,发现简单的use test,mysql实际执行了很多内容:
sql代码  
130603 16:02:11     2 query     select database()  
                    2 init db   test  
                    2 query     show databases  
                    2 query     show tables  
                    2 field list        b   
                    2 field list        bmw  
                    2 field list        http_auth   
                    2 field list        perf_machine   
                    2 field list        t   
                    2 field list        t1   
                    2 field list        t2   
                    2 field list        t5   
                    2 field list        t_max_col   
                    2 field list        tb   
                    2 field list        tbcsv   
                    2 field list        tbmemory   
                    2 field list        tbmyisam   
                    2 field list        tc   
                    2 field list        total   
                    2 field list        tt   
   而简单的show tables,show databases, select database(),show tables from test,实际都只对应一条generallog。
sql代码  
130603 16:17:12     2 query     show tables
130603 16:17:28     2 query     show databases
130603 16:17:48     2 query     select database()
130603 16:19:44     3 query     show tables from test  
     从general log可以看到 一条use test,实际执行了多次dispatch_command(),使用gdb对general_log_write()设置断点,实际执行如下:
     com_query,对应的sql是 select database(),调用路径为:handle_one_connection(sql_connect.cc)->do_command(sql_parse.cc)->dispatch_command(sql_parse.cc,command=com_query,packet=select database());
     com_init_db,调用路径为:handle_one_connection(sql_connect.cc)->do_command(sql_parse.cc)->dispatch_command(sql_parse.cc,command=com_init_db,packet=test);
     com_query,对应的sql是 show databases,调用路径为:handle_one_connection(sql_connect.cc)->do_command(sql_parse.cc)->dispatch_command(sql_parse.cc,command=com_query,packet=show databases);
     com_query,对应的sql是show tables,调用路径为:handle_one_connection(sql_connect.cc)->do_command(sql_parse.cc)->dispatch_command(sql_parse.cc,command=com_query,packet=show tables);
     com_field_list,调用路径为:handle_one_connection(sql_connect.cc)->do_command(sql_parse.cc)->dispatch_command(sql_parse.cc,command=com_field_list,packet=columns_priv)。此处是n次调用(n为被use的schema下的表的个数,每次调用的时候,pachet内容即为表名);
因此在被use的schema下的表比较多的时候,自然会显得有些卡了(连续use同样的schema,则第二次use,则只会有com_query和com_init_db的过程), 为了避免use db后很卡,my.cnf里加上 no-auto-rehash;或者用mysql client连接的时候加上-a选项。
bitscn.com
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product