ITPub博客

首页 > 数据库 > MySQL > Mysql 性能调优 二 2

Mysql 性能调优 二 2

原创 MySQL 作者:Michael_DD 时间:2014-12-25 10:31:58 0 删除 编辑
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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-02-22

  • 博文量
    326
  • 访问量
    2671972