优化mysql的几种常用方法

  

下文我给大家简单讲讲关于优化mysql的几种常用方法,大家之前了解过相关类似主题内容吗?感兴趣的话就一起来看看这篇文章吧,相信看完优化mysql的几种常用方法对大家多少有点帮助吧。

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,优化mysql的几种常用方法”> <br/> </p> <p> 1。选择合适的存储引擎:InnoDB </p> <p>除非你的数据表使用来做仅仅读或者全文检索(相信如今提到全文检索,没人会用MYSQL了)。你应该默认选择InnoDB。</p> <p>你自己在測试的时候可能会发现MyISAM比InnoDB速度快。这是由于:MyISAM仅仅缓存索引,而InnoDB缓存数据和索引,MyISAM不支持事务。可是假设你使用innodb_flush_log_at_trx_commit=2能够获得接近的读取性能(相差百倍)。</p> <p> 1.1怎样将现有的MyISAM数据库转换为InnoDB: </p> <pre> MYSQL - u (USER_NAME) - p - e“显示表(DATABASE_NAME);“| tail - n + 2 | xargs - i & # 39; {} & # 39;回声“ALTER TABLE{}引擎=InnoDB;“比;alter_table.sql
  perl - p - i - e & # 39; s/(search_ [a-z_] +引擎=)InnoDB//1 myisam/舌鳎# 39;alter_table.sql
  mysql - u - p [USER_NAME] [DATABASE_NAME] & lt;alter_table.sql </pre> <p> 1.2为每一个表分别创建InnoDB文件:<br/> </p> <pre> innodb_file_per_table=1 </pre> <p>这样能够保证ibdata1文件不会过大。失去控制,尤其是在运行mysqlcheck - o所有数据库的时候。</p> <p> 2。保证从内存中读取数据。讲数据保存在内存中</p> <p> 2.1足够大的通过innodb_buffer_pool_size </p> <p>推荐将数据全然保存在通过innodb_buffer_pool_size,即按存储量规划通过innodb_buffer_pool_size的容量。这样你能够全然从内存中读取数据。最大限度降低磁盘操作。</p> <p> 2.1.1怎样确定通过innodb_buffer_pool_size足够大。数据是从内存读取而不是硬盘? </p> <p>方法1 </p> <pre> mysql>显示全球状态像& # 39;innodb_buffer_pool_pages_ % & # 39;;
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
  | | Variable_name |值
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
  | 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行集(0.00秒)</pre> <p>发现Innodb_buffer_pool_pages_free为0,则说明缓冲池已经被用光,须要增大通过innodb_buffer_pool_size </p> <p> InnoDB的其它几个參数:</p> <pre> innodb_additional_mem_pool_size buffer_pool=1/200
  innodb_max_dirty_pages_pct 80% </pre> <p>方法2 </p> <p>或者用iostat - d - x - k 1命令,查看硬盘的操作。</p> <p> 2.1.2服务器上是否有足够内存用来规划</p> <p>运行回声1比;/proc/sys/vm/drop_caches清除操作系统的文件缓存。能够看到真正的内存使用量。</p> <p> 2.2数据预热</p> <p>默认情况,仅仅有某条数据被读取一次,才会缓存在innodb_buffer_pool。所以,数据库刚刚启动,须要进行数据预热,将磁盘上的全部数据缓存到内存中。</p> <p>数据预热能够提高读取速度。</p> <p>对于InnoDB数据库,能够用下面方法,进行数据预热:</p> <p> 1。将下面脚本保存为MakeSelectQueriesToLoad。sql </p> <>之前选择截然不同
  CONCAT(& # 39;选择& # 39;ndxcollist, & # 39;从db & # 39; & # 39;强生# 39;,结核病,
  & # 39;订单& # 39;、ndxcollist & # 39;; & # 39;SelectQueryToLoadCache
  从
  (
  选择
  引擎,table_schema db, table_name结核病,
  index_name, GROUP_CONCAT ndxcollist (column_name ORDER BY seq_in_index)
  从
  (
  选择
  B.engine、A.table_schema A.table_name,
  A.index_name、A.column_name A.seq_in_index
  从
  information_schema。统计一个内连接
  (
  选择引擎、table_schema table_name
  从information_schema。表在哪里
  引擎=& # 39;innodb # 39;
  )B使用(table_schema table_name)
  在B。table_schema不在(& # 39;information_schema& # 39;, & # 39; mysql # 39;)
  订单由table_schema、table_name index_name seq_in_index
  )
  集团由table_schema table_name index_name
  )AA
  ORDER BY db,结核病
  ,</pre> <p> 2。运行<br/> </p> <pre> mysql -uroot——& lt;/root/MakeSelectQueriesToLoad。sql在;/root/SelectQueriesToLoad。sql </pre> <p> 3。每次重新启动数据库,或者整库备份前须要预热的时候运行:<br/> </p> <pre> mysql -uroot & lt;/root/SelectQueriesToLoad。sql在;2/dev/null祝辞,1 </pre> <h2 class=优化mysql的几种常用方法