Mysql 性能调优 二 2
oracle 数据库迁移到 mysql数据库
很复杂的sql语句必须重新编写成相对简单的sql
性能会下降
原因:
nest loopjoin
hash join
sort mergejoin
hash 的性能原因高于嵌套sql的for的排序
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
锁:
排它锁:当视图修改数据时,事务会为所以来的数据资源请求排它锁,一旦授予,事务将一直持有排它锁,直至事务完成。
这种锁模式之所以称为排它锁,是因为相对于相同的数据资源,如果有其他事务已经获得了该资源的任何类型的锁,就不能再获得该资源的排它锁;
如果有其他事务已经获得该资源的排它锁,就不能再获得该资源的任何类型的锁。
共享锁:当视图读取数据时,事务默认会为所依赖的数据资源请求共享锁,读操作一完成,就立即释放资源上的共享锁。
这种锁模式之所以成为共享锁,是因为多个事务可以同事持有同一数据资源上的共享锁。
事务之间锁的相互制约关系:如果数据正在由一个事务进行修改,其他事务就既不能修改该数据,也不能读取(至少默认不能)该数据,直到第一个数据完成。
吐过数据正在由另一个事务读取,其他事务就不能修改该数据(至少默认不能)。
1.共享锁只用于表级,排他锁用于行级。
2.加了共享锁的对象,可以继续加共享锁,不能再加排他锁。加了排他锁后,不能再加任何锁。
3.比如一个DML操作,就要对受影响的行加排他锁,这样就不允许再加别的锁,也就是说别的会话不能修改这些行。
同时为了避免在做这个DML操作的时候,有别的会话执行DDL,修改表的定义,所以要在表上加共享锁,这样就阻止了DDL的操作。
4.当执行DDL操作时,就需要在全表上加排他锁。
表锁
行锁
系统参数:
lock_wait_timeout
max_write_lock_count
innodb_table_locks
状态参数:
Table_locks_waited
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[server]
[mysqld]
[client]
[mysql]
[mysqladmin]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
慢查询
系统参数:
slow_query_log
slow_query_log_file
query_cache_type
query_cache_limit
query_cache_size
long_query_time
状态参数:
Last_query_cost
打开慢查询:
1.
直接去my.conf中查看。
my.conf中的配置(放在[mysqld]下的下方加入)
[mysqld]
slow_query_log_file = /var/lib/mysql/test1-slow.log
long_query_time = 1 #单位是秒
log-queries-not-using-indexes
使用sql语句来修改:不能按照my.conf中的项来修改的。
修改通过
show VARIABLES like "%slow%"
语句列出来的变量,运行如下sql:
set global slow_query_log = ON;
set global long_query_time=0.1; #设置大于0.1s的sql语句记录下来
2. 慢查询函数:
mysql> select sleep(12);
+-----------+
| sleep(12) |
+-----------+
| 0 |
+-----------+
1 row in set (12.00 sec)
mysql>
3. 查看日志
[root@test1 ~]# cat /var/lib/mysql/test1-slow.log
/usr/sbin/mysqld, Version: 5.6.22-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 141217 13:13:58
# User@Host: root[root] @ localhost [] Id: 2
# Query_time: 12.000427 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1418793238;
select sleep(12);
[root@test1 ~]#
php编写的慢查询分析脚本:
http://sourceforge.net/projects/myprofi/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29500582/viewspace-1379440/
,如需转载,请注明出处,否则将追究法律责任。