MySQL优化实战

1. 优化数据库表结构
要想获取好的性能,首先在设计数据库表时就应考虑。
ETS的表设计为:objectId, parentId, otag其中objectId为非空主键。
在使用当中要常利用objectId查询并添加记录,根据parentId查询具有相同父对象ID的子对象objectID记录,故因将
objectId和parentId分别建立相应的索引提高查询性能。

2. 优化查询语句
可以利用explain来解释select语句用于分析查询性能

下面的例子为利用parentId查询其子对象的otag,分别对比有无索引情况。


图1 其中dir4下有10个子对象
通过图1可以看出,在parentId未加索引的情况下 rows显示搜索了10616行记录,而下面对parentId加了索引后,只需要查询10条记录即可。
通过查看rows列可以让我们找到潜在的性能问题。Extra表该查询利用到了where条件判断语句,因此若利用where条件查询的多的情况下,应考虑对where判断的列增加索引。

3. 优化MySQL数据库存储引擎
由于ETS利用 innodb,故此处以innodb配置举例。
相关的参数可以在mysql交互式模式下查看配置,若要持久化配置需修改配置文件重启后生效,相关参数的配置可以添加至配置文件(/etc/my.cnf)相应数据库实例中。
在此列举几个常用配置:
1. innodb_buffer_pool_size:默认为8M,可调节为物理内存的60%~80%,通常设置为比表空间大10%左右,视具体数据量大小而定。
2.  innodb_log_file_size:决定 recovery speed速度,太小影响查询性能,太大影响影响恢复数据,通常设置为 256M折中。
3.  innodb_log_buffer_size:用来缓冲日志数据,因写磁盘很慢,故适当调节写日志的缓冲大小,因1秒会刷新一次, 不需要设到超过1秒的需求, 一般设为4M。
4.  innodb_flush_log_at_trx_commit:事务提交时对日志信息的处理,通常设定为2可提高写性能。
默认为1表示 在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新,其速度较慢。
为提高性能可设置为0或者2,
0表示 日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,任何mysqld进程的崩溃会删除崩溃前最后一秒的事务。
2表示 在每个事务提交时,日志缓冲被写到文件, 但不对日志文件做到磁盘操作的刷新。只有操作系统崩溃或掉电才会删除最后一秒的事务,不然不会丢失事务。
5.  innodb_thread_concurrency InnoDB kernel最大的线程数,常设定为CPU内核数x2
6. innodb_commit_concurrency 同一时刻,允许多少个线程同时提交InnoDB事务默认值为0,表示允许任意数量的事务在同一时间点提交
7 . max_connections 默认为100 ,并发量大时可适当调高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值