http://www.jeffvree.com

                                                                  【大发直播注册】mysql优化的几种方法-mysql教程

                                                                  推荐教程:MySQL教程

                                                                  1. 选择合适的存储引擎: InnoDB

                                                                    除非你的数据表使用来做仅仅读或者全文检索 (相信如今提到全文检索,没人会用 MYSQL 了)。你应该默认选择 InnoDB 。

                                                                    你自己在測试的时候可能会发现 MyISAM 比 InnoDB 速度快。这是由于: MyISAM 仅仅缓存索引,而 InnoDB 缓存数据和索引,MyISAM 不支持事务。可是 假设你使用 innodb_flush_log_at_trx_commit = 2 能够获得接近的读取性能 (相差百倍) 。

                                                                  1.1 怎样将现有的 MyISAM 数据库转换为 InnoDB:

                                                                  mysql -u [USER_NAME] -p -e "SHOW TABLES IN [DATABASE_NAME];" | tail -n +2 | xargs -I '{}' echo "ALTER TABLE {} ENGINE=InnoDB;" > alter_table.sqlperl -p -i -e 's/(search_[a-z_]+ ENGINE=)InnoDB//1MyISAM/g' alter_table.sqlmysql -u [USER_NAME] -p [DATABASE_NAME] < alter_table.sql

                                                                  1.2 为每一个表分别创建 InnoDB FILE:

                                                                  innodb_file_per_table=1

                                                                    这样能够保证 ibdata1 文件不会过大。失去控制。尤其是在运行 mysqlcheck -o –all-databases 的时候。

                                                                  2. 保证从内存中读取数据。讲数据保存在内存中

                                                                  2.1 足够大的 innodb_buffer_pool_size

                                                                    推荐将数据全然保存在 innodb_buffer_pool_size ,即按存储量规划 innodb_buffer_pool_size 的容量。这样你能够全然从内存中读取数据。最大限度降低磁盘操作。

                                                                  2.1.1 怎样确定 innodb_buffer_pool_size 足够大。数据是从内存读取而不是硬盘?

                                                                  方法 1

                                                                  mysq(l> SHOW G,LOBAL STATUS LIKE 'innodb_buffer_pool_pages_%';+----------------------------------+--------+| Variable_name                    | Value  |+----------------------------------+--------+| Innodb_buffer_pool_pages_data    | 129037 || Innodb_buffer_pool_pages_dirty   | 362    || Innodb_buffer_pool_pages_flushed | 9998   || Innodb_buffer_pool_pages_free    | 0      |  !!!!!!!!| Innodb_buffer_pool_pages_misc    | 2035   || Innodb_buffer_pool_pages_total   | 131072 |+----------------------------------+--------+6 rows in set (0.00 sec)

                                                                    发现 Innodb_buffer_pool_pages_free 为 0,则说明 buffer pool 已经被用光,须要增大 innodb_buffer_pool_size

                                                                  InnoDB 的其它几个參数:

                                                                  innodb_additional_mem_pool_size = 1/200 of buffer_poolinnodb_max_dirty_pages_pct 80%

                                                                  方法 2

                                                                    或者用iostat -d -x -k 1 命令,查看硬盘的操作。

                                                                  2.1.2 server上是否有足够内存用来规划

                                                                    运行 echo 1 > /proc/sys/vm/drop_caches 清除操作系统的文件缓存。能够看到真正的内存使用量。

                                                                  2.2 数据预热

                                                                    默认情况,仅仅有某条数据被读取一次,才会缓存在 innodb_buffer_pool。所以,数据库刚刚启动,须要进行数据预热,将磁盘上的全部数据缓存到内存中。

                                                                  郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

                                                                  上一篇:因十几年前排挤竞争对手,高通周四或迎来欧盟二轮反垄断罚款 - 高通
                                                                  下一篇:没有了