- 论坛徽章:
- 0
|
MYSQL 配置原则
配置合理的MySQL 服务器,尽量在应用本身达到一个 MySQL最合理的使用针对MyISAM或InnoDB 不同引擎进行不同定制性配置 针对不同的应用情况进行合理配置针对my.cnf 进行配置,后面设置是针对内存为2G的服务器进行的合理设置
公共选项

MyISAM选项

InnoDB选项

MyISAM和InnoDB存储引擎性能


MyISAM和InnoDB 存储引擎性能差别并不是很大,针对InnoDB来说,影响性能的主要是 innodb_flush_log_at_trx_commit这个选项,如果设置为1 的话,那么每次插入数据的时候都会自动提交,导致性能急剧下降,应该是跟刷新日志有 关系,设置为0效率能够看到明显提升,当然,同样你可以SQL 中提交“SET AUTOCOMMIT = 0”来设置达到好的性能。 同时也可以看出值得使用InnoDB来替代myISAM引擎来进行开发,毕竟 InnoDB有多数据库特性、更良好的数据存储性能和查询性能
MySQL技巧分享





------------------------------------------------------------
存储引擎- - My I SAM, I n n oDB ,其他 MyISAM 相对更适合插入不多不频繁,查询较多的应用环 境:不支持事务、只能是锁全表、不支持外键、不支持 WAL(write ahead logging) InnoDB适合大并发写入和查询的环境:支持事务(ACID 兼容)、行锁、外键、具备自己的内存缓冲池、独立的表 空间(不受大文件限制) Merge其实就是MRG_MyISAM,适用于将相同类型的多 种子表合并成一个大表,便于操作,但是无法完全利用到 索引的好处 ARCHIVE存储引擎被用来以非常小的覆盖区存储大量无 索引数据。 是只读类型。
MyISAM 优化 key_buffer_size 分配给MyISAM索引缓存的内存总数 ● query_cache_size 控制分配给查询缓存的内存总量 ● long_query_time 设定慢查询时间 ● external-locking 禁止使用外部锁,可预防死锁 ● back_log 临时停止响应新请求前在短时间内可以堆起多少请求。如 果你需要在短时间内允许大量连接,可以增加该数值 ● table_cache 缓存数据表的数量,避免重复打开表的开销 ● thread_cache_size 缓存可重用线程数,见笑创建新线程的开销 ● sort/join/read buffer size 分配给每个线程中处理排序/扫描表连 接及索引的内存 ● skip-bdb 等,禁用不必要的引擎
InnoDB 优化
● 如果数据库CPU使用率小于70%,则MySQL的压力可能在于磁盘 因素,可能有太多的事务和提交,或者缓冲池太小。可以另缓冲池更 大一些,但不要设置缓冲池等于或超过物理内存的80% ● 把多个修改(INSERT/UPDATE/DELETE)放在一个事务里。但是也要 注意有此产生的效率问题 ● innodb_flush_log_at_trx_commit 设置为0(每秒刷新),1(实时 刷新),2(只写日志文件,不刷新到磁盘) ● 使用较大日志文件及较大日志缓冲 ● 往innoDB表导入数据时,先关闭autocommit模式,否则会实时 刷新数据到磁盘 ● 更多的请查看:http://imysql.cn/?q=node/116 innodb_buffer_pool_size 控制分配给包括集群数据以及 次要索引页的Innodb缓存的内存总数,默认16MB ● innodb_additional_mem_pool_size 控制分配给对 Innodb内部数据字典进行排序所需的缓冲,默认1MB ● innodb_log_buffer_size 控制分配给对Innodb存储提前 写日志记录所需的缓冲,默认1MB ● innodb_log_files_in_group 在日志组里日志文件的数 目。InnoDB以循环方式写进文件。默认是2(推荐) ● innodb_log_file_size 默认是5MB。建议值从1MB到N 分之一缓冲池大小,其中N是组里日志文件的数目
其他优化 - - char 型 vs int 型 ● 独立索引 vs 联合索引 ● 记录 slow queries ● 使用存储过程、触发器、视图 ● 定期执行optimize / analyze table ● 针对Innodb表,尽量不执行 SELECT COUNT(*) 语句 ● 善用 EXPLAIN来帮助你分析查询优化情况 ● 如果需要对一个较大的且并发读写较多的数据表做 GROUP BY 等统 计操作,建议使用摘要表来存储统计信息,定期更新统计表 表连接时,连接字段的类型最好一致(包括字段长度),这样的话索引 速度快多了 ● 大部分情况下,字符类型的字段索引值需要一部分 ● 尽量使用最合适的数据类型,不要浪费空间和效率 ● 执行查询时,尽量不使用外部函数,因为这样的话就无法使用可能存 在的索引 ● 把拖沓复杂,速度慢的的查询分解成多个简洁明了的查询 ● 在索引字段上使用 LIKE 查询时,左边不要使用 '%' 修饰符,这样就 可以利用索引,否则无法使用索引.如 ... `name` LIKE 'yejr%' ● 对于频繁更改的MyISAM表,应尽量避免更新所有变长字段 (VARCHAR、BLOB和TEXT) ● 分摊压力,使用集群/复制 ● 查询时如果有 ORDER BY分句
|
|