MySQL 数据库性能优化之SQL优化

分类:MySQL注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础

  • 优化目标
    1. 减少 IO 次数
      IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。
    2. 降低 CPU 计算
      除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标
  • 优化方法
    1. 改变 SQL 执行计划
      明确了优化目标之后,我们需要确定达到我们目标的方法。对于 SQL 语句来说,达到上述2个目标的方法其实只有一个,那就是改变 SQL 的执行计划,让他尽量“少走弯路”,尽量通过各种“捷径”来找到我们需要的数据,以达到 “减少 IO 次数” 和 “降低 CPU 计算” 的目标

    继续阅读 »

MySQL show系列命令总结

分类:MySQL01、show tables或show tables from database_name; — 显示当前数据库中所有表的名称
02、show databases; — 显示mysql中所有数据库的名称
03、show columns from table_name from database_name; 或show columns from database_name.table_name; — 显示表中列名称
04、show grants for user_name; — 显示一个用户的权限,显示结果类似于grant 命令
05、show index from table_name; — 显示表的索引
06、show status; — 显示一些系统特定资源的信息,例如,正在运行的线程数量
07、show variables; — 显示系统变量的名称和值
08、show processlist; — 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。
09、show table status; — 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间
10、show privileges; — 显示服务器所支持的不同权限

继续阅读 »

MySQL 压力测试工具

分类:Performents分类:MySQL第一、mysqlslap
MySQL从5.1.4版开始带有一个压力测试工具mysqlslap,通过模拟多个并发客户端访问mysql来执行测试,使用起来非常的简单。通过mysqlslap –help可以获得可用的选项,这里列一些主要的参数,更详细的说明参考官方手册。

–auto-generate-sql, -a
自动生成测试表和数据

–auto-generate-sql-load-type=type
测试语句的类型。取值包括:read,key,write,update和mixed(默认)。

–number-char-cols=N, -x N
自动生成的测试表中包含多少个字符类型的列,默认1

–number-int-cols=N, -y N
自动生成的测试表中包含多少个数字类型的列,默认1

–number-of-queries=N
总的测试查询次数

继续阅读 »

MySQL 减少主从数据同步延迟的几个方案

分类:MySQL 基于局域网的master/slave机制在通常情况下已经可以满足’实时’备份的要求了。如果延迟比较大,就先确认以下几个因素:

1. 网络延迟
2. master负载
3. slave负载

另外,再介绍2个可以减少延迟的参数

–slave-net-timeout=seconds     单位为秒 默认设置为 3600秒

参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据

–master-connect-retry=seconds   单位为秒 默认设置为 60秒

参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试。

MySQL Amoeba实现DB主从读写分离

分类:MySQLAmoeba的简介

Amoeba(变形虫)项目,专注分布式数据proxy 开发.座落与Client、DB Server(s)之间.对客户端透明.具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果.

主要解决了哪些问题:

• 降低数据切分带来的复杂多数据库结构

• 提供切分规则并降低数据切分规则给应用带来的影响

• 降低db 与客户端的连接数

• 读写分离

继续阅读 »

MySQL 提高导入导出速度的几个方案

分类:MySQLMySQL导出的SQL语句在导入时有可能会非常非常慢,在处理百万级数据的时候,可能导入要花几小时。在导出时合理使用几个参数,可以大大加快导 入的速度。

-e 使用包括几个VALUES列表的多行INSERT语法;
–max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小;
–net_buffer_length=XXX TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行。

注意:max_allowed_packet 和 net_buffer_length 不能比目标数据库的设定数值 大,否则可能出错。

继续阅读 »

2010-10-02MySQL

没有评论
116

MySQL:使用tcmalloc提升数据库性能

分类:MySQLgoogle的开源性能优化工具包 perftool 被证明对提高应用程序性能确有帮助. tcmalloc是其中一个, 与标准的malloc相比, 在内存的分配上效率很高; 编译mysql时建议使用tcmalloc库–
简单来说, 只要在./configure 后生成的Makefile里改一下, 在连接库的那行最后面加上 -ltcmalloc即可.

如果已经使用的是已编译的binary,或者只想简单测试一下tcmalloc的效果, 可以用LD_PRELOAD环境变量制定运行时使用tcmalloc库; 例如在mysqld_safe里加入

export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

确定程序是否使用tcmalloc库可以用lsof命令:

lsof -n| grep tcmalloc

继续阅读 »


返回顶部