MySql如何跟踪SQL脚本执行

来源:互联网 发布:2016年网络流行词汇 编辑:程序博客网 时间:2024/06/06 14:24

笔者管理的一个外包软件项目,在初期运行效率还行,当数据达到万级时,就感觉卡顿起来。

因为公司网络情况欠佳,所以考虑有两个方面问题:1、是否建立了索引? 2、网络是否有问题?

对外包公司的能力毫无信心,所以先从索引查起。问过对方运维支撑人员,说肯定是所有表都建立了索引的......本着怀疑精神,连上系统数据库,一看,感觉有点怀疑自己的眼睛及专业能力,连主键都没有看到......

在这里不得不吐槽下这些强大的开发商们,除了添乱就是添堵,而做为甲方代表的我对他们竟然毫无办法,哎!!!


按基本需求对相关表建立了索引,性能有一定改善。为了进一步优化,决定对索引字段进行精确定位,此时就需要知道SQL脚本到底以什么作为条件关键字进行查询。

由于该系统采用Liunx+Tomcat+MYSQL+JAVA模式,所以需要在Liunx下跟踪Mysql脚本执行语句,根据语句来判断如何优化索引。在网上搜了下,可以通过输出SQL日志的方式来查看使用到的所有SQL语句。

配置/etc/my.cnf文件找到[mysqld],在下面添加:log=usr/tmp/my.log修改完后,需要重启mysql服务service mysqld restart

看起来还是挺简单的,但是问题来了,在MYSQL服务器上居然没找到my.cnf文件。在网上一番忙碌,似乎找到了答案。

Linux下用rpm包安装的MySQL是不会安装/etc/my.cnf文件的,至于为什么没有这个文件而MySQL却也能正常启动和作用,网上流传两种说法:第一种说法,my.cnf只是MySQL启动时的一个参数文件,可以没有它,这时MySQL会用内置的默认参数启动;第二种说法,MySQL在启动时自动使用/usr/share/mysql目录下的my-medium.cnf文件,这种说法仅限于rpm包安装的MySQL。解决方法,只需要复制一个/usr/share/mysql目录下的.cnf文件到/etc目录,并改名为my.cnf即可。

搞定配置文件,然后开始重启MySQL服务,但是问题又来了。

mysqld: unrecognized service
居然提示没有MySLQD这个服务。

查看是否安装MYSQL包

rpm -q mysql >package mysql is not installed
居然没有MySQL。。。彻底迷茫ing。
[root@localhost ~]# whereis mysqlmysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz[root@localhost ~]# rpm -qa|grep -i  mysqlMySQL-server-5.5.33-1.rhel5.x86_64MySQL-client-5.5.33-1.rhel5.x86_64
终于找到了,按网上搜索的资料,应该是系统自带的MySql。

service mysql restart
OK,系统重启成功。等一段时间查看日志,相应的SQL已经输出存储到指定位置。

[root@localhost tmp]# cd /usr/tmp[root@localhost tmp]# cat my.log | more/usr/sbin/mysqld, Version: 5.5.33-log (MySQL Community Server (GPL)). started with:Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sockTime                 Id Command    Argument161231  8:50:08     1 Connect   test@192.168.60.152 on dst                    1 Query     /* mysql-connector-java-5.1.12 ( Revision: ${bzr.revision-id} ) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout' OR Variable_name = 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set_connection' OR Variable_name = 'character_set' OR Variable_name = 'character_set_server' OR Variable_name = 'tx_isolation' OR Variable_name = 'transaction_isolation' OR Variable_name = 'character_set_results' OR Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name ='system_time_zone' OR Variable_name = 'lower_case_table_names' OR Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR Variable_name = 'query_cache_size' OR Variable_name = 'init_connect'






0 0