首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux数据库>其他>正文

MySQL数据库性能优化实战

http://www.oklinux.cn  2009-03-03  IT168    会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn
过年这段时间由于线上MySQL数据库经常压力过大导致响应非常缓慢甚至死机,咬咬牙下大决心来解决效率不高的问题!

  首先是由于公司秉承快速开发原则,频繁上线,导致每次忽视了性能问题!日积月累,所以导致系统越来越慢,所以如果你的系统查询语句本来就优化的很好了可能参考意义不大!

  提取慢查询日志文件,应该在你的DataDir目录下面

  通过程序处理慢查询文件,将文件格式的慢查询导入到数据库中:

1 mysql> desc slow_query;
2 --------------- ------------- ------ ----- --------- -------
3 | Field | Type | Null | Key | Default | Extra |
4 --------------- ------------- ------ ----- --------- -------
5 | Date | varchar(32) | NO | | | | 查询发生的时间
6 | user | varchar(64) | NO | | | |
7 | host | varchar(64) | NO | | | |
8 | content | text | NO | | | | 将Statement进行Mask后的语句,便于Group By
9 | query_time | int(11) | NO | | | | 查询所用时间,直接性能指标
10 | lock_time | int(11) | YES | | 0 | | 等待锁定的时间
11 | rows_sent | int(11) | YES | | 0 | | 返回的结果行数
12 | rows_examined | int(11) | YES | | 0 | | 扫描行数(很重要,上万以后就要重点注意了
13 | statement | text | YES | | NULL | | 实际查询语句
14 --------------- ------------- ------ ----- --------- -------


然后发挥您的想象力在这个表中尽力捕捉你想捕捉的,那类型语句压力最大、扫描行数最多、等锁最久……

  比如:

  优化后:

1 mysql> select sum(query_time)/count(*),count
2 (*),sum(query_time),min(Date),Max(Date) from slow where Date>'2008-02-20 22:50:52' and Date<'2008-02-21 17:34:35';
3 -------------------------- ---------- ----------------- --------------------- ---------------------
4 | sum(query_time)/count(*) | count(*) | sum(query_time) | min(Date) | Max(Date) |
5 -------------------------- ---------- ----------------- --------------------- ---------------------
6 | 5.7233 | 2197 | 12574 | 2008-02-20 22:51:16 | 2008-02-21 17:34:10 |
7 -------------------------- ---------- ----------------- --------------------- ---------------------
8 1 row in set (0.09 sec)


优化前:

1 mysql> select sum(query_time)/count(*),count(*),sum(query_time),min(Date),Max(Date) from slow where Date>'2008-02-17 22:50:52' and Date<'2008-02-18 17:34:35';
2 -------------------------- ---------- ----------------- --------------------- ---------------------
3 | sum(query_time)/count(*) | count(*) | sum(query_time) | min(Date) | Max(Date) |
4 -------------------------- ---------- ----------------- --------------------- ---------------------
5 | 2.5983 | 16091 | 41810 | 2008-02-17 22:50:58 | 2008-02-18 17:34:34 |
6 -------------------------- ---------- ----------------- --------------------- ---------------------
7 1 row in set (0.15 sec)


再比如,优化前:

  基本信息:

  慢查询统计从 2008-02-17 17:59:34 到2008-02-18 22:45:22时间段,接近29个小时的数据;

  总共有慢查询28914个,平均一小时有1000个慢查询;(花了一天优化降到每小时100个的样子了,成就感啊)

  所有慢查询耗费总时间75690秒;

  慢查询时间设置是大于2秒

  参数说明:

  sum--总执行时间(秒);

  count--执行次数;

  avg--平均执行时间(秒);

  content--类似SQL语句的表达通式,其中'DD'代表数字;

  statement--某一条具体执行的SQL语句

  由于访问时的锁,导致update非常慢:

1 mysql> select count(*) as n,sum(query_time) as s, sum(query_time)/count(*) as avg,substring_index(statement,' ',2) as u from slow where statement like 'update%' and query_time>14 group by u;
2 ----- ------ --------- --------------------------
3 | n | s | avg | u |
4 ----- ------ --------- --------------------------
5 | 7 | 112 | 16.0000 | update conversation |
6 | 151 | 2413 | 15.9801 | update user |
7 | 4 | 65 | 16.2500 | update user_modification |
8 ----- ------ --------- --------------------------


说明程序中还是存在一些忘记释放事务锁的情况

  最耗费资源的10个查询:

共2页: 上一页 1 [2] 下一页

上一篇:Novell发布最新虚拟环境管理软件   下一篇:Firefox市场份额提升至22% IE继续下滑

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Linux下安装MySQL 5.1.31过程总结
·Linux下实现自动备份Oracle数据库
·Linux下Oracle10g
·MySQL管理利器:phpMyAdmin 3.1.3 RC1 释出
·五款常用MySQL slow log分析工具的比较
·账户方案系统角色多管齐下保障Oracle的安全
·让 Kohama 支持 Unix Domain Socket 方式连接到 MySQL
·Oracle中存取控制介绍
·Oracle外键列上是否需要索引?
·MySQL双向复制简单配置步骤
·Linux Oracle 设置LOCK_SGA
·在Linux下安装图形界面MySQL管理工具
·Unix平台Oracle数据库优化简介
·Oracle的回滚段存储内容分析
·Oracle ASM自动管理存储管理简介
·Oracle同义词管理功能给你带来的惊喜与注意问题
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Linux下安装MySQL 5.1.31过程总结
·Linux下实现自动备份Oracle数据库
·Linux下Oracle10g
·MySQL管理利器:phpMyAdmin 3.1.3 RC1
·五款常用MySQL slow log分析工具的比较
·账户方案系统角色多管齐下保障Oracle的
·让 Kohama 支持 Unix Domain Socket 方
·Oracle中存取控制介绍
·Oracle外键列上是否需要索引?
·MySQL双向复制简单配置步骤
·Linux Oracle 设置LOCK_SGA
·在Linux下安装图形界面MySQL管理工具
  阅读排行
·Linux下安装Oracle数据库完整笔记
·Oracle建表过程初学
·Linux平台下启动oracle 11g EM控制台
·RHEL5.1 下安装Oracle 10.2.0.1及常见
·Oracle 建立临时表语法及使用技巧
·MySQL导入导出.sql文件步骤
·Linux操作系统下MySQL的卸载、安装全过
·Linux平台下配置MySQL主从复制
·Mysql JDBC驱动版本与Mysql版本的对应
·Linux系统中Oracle数据库的用户权限
·关于MySQL事务处理学习
·Linux平台下修正MySQL中文乱码问题
·Linux系统下启动MySQL的命令及相关知识
·MySQL服务器上添加一个允许远程访问的
·向MySQL插入数据乱码解决办法
网摘收藏: