mysql的优化
1/dev/sda2 /usr/lib/mysql ext3 noatime,nodiratime,data=writeback 0 1
2o_direct 选项
3.xfs 文件系统
4cat /proc/sys/vm/swappiness
5.sync_binlog
6.innodb_flush_log_at_trx_commit=1
expire_logs_days
8.innodb_thread_concurrency 变量,一次性有多少线程进入内核,0表示不限制。这个变量的值一般是cpu数量*磁盘数量*2
9.innodb_thread_sleep_delay(如果已经进入内核的线程操作了允许的数量,新的线程就无法再进入内核,innodb使用两段处理来尝试让线程尽可能高效的进入内核,两段策略减少了因操作系统调度引起的上下文切换,线程第一次休眠innodb_thread_sleep_delay微妙,然后重试,如果它依然不能进入内核,则放入一个等待线程队列,让操作系统来处理)
10.innotop 监控
11.pt-query-digest 创建查询报告
12.substring函数把blob值转换成varchar
13.创建processlist快照,通过state或者command字段来聚合它们
14临时表的优化,让临时表运行更快的最好方式是,把它们放在基于内存的文件系统(gun/linux上是tmpfs),这会降低一些开销,尽管这依然比内存表慢很多。因为操作系统会避免把数据写到磁盘,所以内存文件系统可以帮助提升性能,一般的文件系统也会在内存中缓存,但是操作系统会每隔几秒就刷新一次,tmpfs文件系统从来不会刷新(怎么做到的呢?),它就是为低开销和简单起见而设计的。没必要为这个文件系统预备任何恢复方案,这使得它更快。
服务器设置里控制临时表文件放在哪的是tmpdir,建议监控文件系统使用率以保证有足够的空间来存放临时表,如果需要,可以指定多个临时表存放位置,mysql将会轮训使用。
15.如果blob列非常大,并且用的是innodb,也许可以增大innodb日志缓冲大小。