mysq相关记录

1、 查询语句的优化 。使:explain找出语句瓶颈、
2、 使用变量替换now()等 函数, 启用查询缓存
3、 使用连接池
4、 使用内存表(引擎设为memory)
5、 使用mysql语句分析工具
6、 Innodb引擎优化
7、 Where条件排序(where语句从前往后执行,限制范围小的应放在前面. 能够快速缩小结果集的where条件写在前面,如果有恒量条件也尽量写在前面;)
8、 Explain工具学习
9、 尽量不要使用like ‘%%’
10、   改变表长(read_buffer_size)
11、 调整配置文件减少IO请求次数
12 、 query_cache_size = 32M      SHOW STATUS LIKE 'qcache%'查询缓存
13 、修改打开的表数:mysqld.conf      table_cache    SHOW STATUS LIKE 'open%tables';
Open_tables  已经打开的    Opened_tables  需要打开的
14 、缓存线程:SHOW STATUS LIKE 'threads%';   thread_cache = 40 来实现此目的。
15、show status like '%key_read%';  
Key_reads 代表命中磁盘的请求个数, Key_read_requests 是总数。命中磁盘的读请求数除以读请求总数就是不中比率 —— 在本例中每 1,000 个请求,大约有 0.6 个没有命中内存。如果每 1,000 个请求中命中磁盘的数目超过 1 个,就应该考虑增大关键字缓冲区了。
16、SHOW STATUS LIKE "sort%";   排序统计信息   如果 sort_merge_passes 很大,就表示需要注意 sort_buffer_size
17、确定表扫描比率
SHOW STATUS LIKE "com_select";
SHOW STATUS LIKE "handler_read_rnd_next";
Handler_read_rnd_next / Com_select 得出了表扫描比率 —— 在本例中是 521:1。如果该值超过 4000,就应该查看 read_buffer_size,例如 read_buffer_size = 4M。如果这个数字超过了 8M,就应该与开发人员讨论一下对这些查询进行调优了!

性能调优工具:mytop    为所有连接上的客户机以及它们正在运行的查询提供了一个视图。mytop 还提供了一个有关关键字缓冲区和查询缓存效率的实时数据和历史数据,以及有关正在运行的查询的统计信息。这是一个很有用的工具,可以查看系统中(比如 10 秒钟之内)的状况,您可以获得有关服务器健康信息的视图,并显示导致问题的任何连接。
• mytop 告诉您目前 MySQL 服务器上都在进行什么操作,并提供一些关键的统计信息。在发现数据库有问题时,应该首先求助于这个程序。
• mysqlard 会给出 MySQL 服务器一个关键性能指示器的图形表示,并给出一些调优建议。
• mysqlreport 是一个必须的工具。它为您分析 SHOW STATUS 变量。

17、mysql性能调优工具 
tuning-primer.sh:http://www.day32.com/MySQL/tuning-primer.sh


可以看出在MySQL 5.0里面,MyISAM和InnoDB存储引擎性能差别并不是很大,针对InnoDB来说,影响性能的主要是 innodb_flush_log_at_trx_commit 这个选项,如果设置为1的话,那么每次插入数据的时候都会自动提交,导致性能急剧下降,应该是跟刷新日志有关系,设置为0效率能够看到明显提升,当然,同样你可以SQL中提交“SET AUTOCOMMIT = 0”来设置达到好的性能。另外,还听说通过设置innodb_buffer_pool_size能够提升InnoDB的性能,但是我测试发现没有特别明显的提升。
Innodb引擎把数据和索引都载入到内存中的缓冲池(buffer pool)
Innodb log文件的尺寸多大合适,首先通过执行以下Query能够算出每分钟写入多少数据到日志文件
   pager grep sequence
nopager
SELECT (777500289 - 764981234) / 1024 / 1024 AS MB_per_min;
另外对于有很频繁增删改操作的数据库,通过将innodb_flush_log_at_trx_commit = 2能够大幅提高I/O性能.

innodb_io_capacity: 这个参数据控制Innodb checkpoint时的IO能力
innodb_max_purge_lag 默认没启用,如果写入和读取都量大,可以保证读取优先,可以考虑使用这个功能。
innodb_read_io_threads 默认为:4 可以考虑8
http://hackmysql.com/mysqlreportguide
innodb_flush_method=O_DIRECT是必须的,
 
mysql  存储过程调试工具:MySQL debugging
SQL For MySQL Developers A Comprehensive Tutorial and Reference》

1、 cursor定义时表是否必须存在(如定义时须表存在,用嵌套存储过程解决)
2、嵌套存储过程 (完成)
3、嵌套游标 (完成)
4、mysqk语句跳转(loop跳转完成)
5、mysql变量定义(用户变量 @xx 局部变量:declare    变量名  类型  默认值  全局变量@@)
变量定义用declare来定义一局部变量,该变量的使用范围只能在begin...end 块中使用,变量必须定义在复合语句的开头,并且是在其它语句之前,也可以同时申明多个变量,如果需要,可以使用default赋默认值

你可能感兴趣的:(mysql,mysq相关记录)