mysql 开发进阶篇系列 18 MySQL Server(innodb_buffer_pool_size)

发布时间:2018-11-15  栏目:MySQL  评论:0 Comments

一.概述

         mysql
提供了无数参数来拓展服务器的装,当服务第一次于开行的时节,所有启动参数值都是系默认的。这些参数在许多产环境下连无能够满足实际的采用需求。在这系列被关系到了liunx
服务器,我这里是centos7.4, mysql 5.7,Xshell6。

  1. 查看mysql server参数

         通过show variables和show
status命令查看mysql的服务器静态参数值和动态运行状态信息。前端是当数据库启动后未会见动态更改的价。比如缓冲区大小,字符集,数据文件名称等;
后者是数据库运行中的动态变化的消息,比如锁等待,当前连接数等。下面来简单翻看下零星独命

--  mysql服务静态参数值
SHOW VARIABLES;

图片 1

--  mysql服务运行状态值
SHOW STATUS;

图片 2

从今这首开始,讲innodb存储引擎中,对于几只重大的服务器参数配置。这些参数为innodb_xx
开头。

二.  潜移默化mysql性能的要害参数

  在上面介绍了mysql server 端的参数查看方法 ,对于这么多参数,
实际大多数参数是匪需用户调整之,下面介绍部分重点参数。先介绍下MyISAM存储引擎的key_buffer_size和table_cache。

  1. key_buffer_size设置

                   key_buffer_size是故来设置索引块(index
Blocks)缓存的深浅,它为抱有线程共享,此参数就应让MYISAM存储引擎。在mysql
5.1晚,系统除去默认的索引块缓存,还可以配备多独key_buffer,可以以点名的表索引,缓存入指定的key_buffer,这样好还粗地回落线程之间的竞争。

-- 查看默认设置
 SHOW VARIABLES LIKE 'key_buffer_size';  

    8388608/1024.0/1024.0=M  默认8M 如下图所示:

     图片 3

-- 建立一个新的索引块缓存
SET  GLOBAL hot_cache2.key_buffer_size=128*1024

  对于GLOBAL
表示针对各国一个新的连年,此参数都将生效,hot_cache2是新的key_buffer名称,可以天天开展重建,例如:

SET  GLOBAL hot_cache2.key_buffer_size=200*1024

  把相互关表的目录,放到指定的索引块缓存中如下:

-- 将表(userbymyisam )索引放入指定的索引块中 
CACHE INDEX userbymyisam IN hot_cache2

图片 4

  想将索引预装到默认的key_buffer中,可以下load index into
cache语句,例如预装表userbymyisam的兼具索引 预装到默认的key_buffer。

LOAD INDEX INTO CACHE userbymyisam

图片 5

-- 删除索引缓存,如下命令
SET  GLOBAL hot_cache2.key_buffer_size=0

  注意:默认的key_buffer是匪克去的如果:  SET  GLOBAL
key_buffer_size=0 下次重启时还见面发。

 总结: cache
index命令于一个表及key_buffer之间起平等种植关系,但老是服务器又开时key_buffer中之数将清空,如果想每次服务器再启时相应表的索引能自动放到key_buffer中,可以在布局文件中装置init-file选项来指定包含cache
index语词文件路径,然后在对应之公文中形容副cache index语句。

   下面创建二只缓存索引块:

图片 6

  每次服务器启动时,执行mysqld_init.sql中之说话,
文件中几乎单说明,分别对应hot_cache和cold_cache:
图片 7

  2. 由此操作系统来安key_buffer

    如果只要装mysql服务系统参数可以在liunx里设置,先使找到my.cnf
文件位置,一般会放在/etc/my.cnf,/etc/mysql/my.cnf。
    如下图所显示,尝试修改默认key_buffer_size改为12M:
    图片 8
    图片 9
    停止服务又另行开sql服务
    图片 10
    图片 11
    再次询问如下

    图片 12

  1. innodb_buffer_pool_size的设置

        
这个参数定义了innodb存储引擎的表数据及目录数据的尽特别外存缓冲区大小,和myisam不同,myisam的key_buffer_size只休息存索引键,而innodb_buffer_pool_size是以为数据块和索引块做缓存的。这个特性以及oracle是同样的,这个值设得愈加强,访问表中数据要的磁盘i/o就越少(物理I/O)。在一个专用的数据库服务器上,可以装是参数达到机械物理内存大小的50–80%。考虑点:在独立为
MySQL
使用的主机里,内存分配还连系统利用,线程独享,myisam缓存等。还有允许的并发连接数。还有建议不要将其装得最好怪,因为对物理内存的竞争或在操作系统及导致内存调度。

-- innodb缓存区大小(kb)
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

图片 13  SELECT
268435456/1024.0/2014.0=130M。

查看内存大小:
[root@xuegod64 ~]# cat /proc/meminfo

    图片 14

  上面内存约等于2031912/1024.0=1984M。
2. buffer_pool 运行参数

-- 下面是buffer_pool 运行相关参数
SHOW STATUS LIKE  'Innodb_buffer_pool_%';

  图片 15

Innodb_buffer_pool_pages_total 

缓存池页总数目。
共占用了16382 页 。单位page

Innodb_buffer_pool_pages_free

缓存池剩余的页数目。
在16382 页中有2000页没有使用。 单位page

Innodb_buffer_pool_pages_data

缓存池中包含数据的页的数目,包括脏页。
14273个页含有数据。单位page

Innodb_buffer_pool_read_requests

innodb进行逻辑读的数量。
529670886次请求读。单位次数

Innodb_buffer_pool_reads

进行逻辑读取时无法从缓冲池中获取而执行单页读取的次数。
941147次是物理I/0读取。单位次数

Innodb_buffer_pool_write_requests

写入 InnoDB 缓冲池的次数。
48606702次请求写入。单位次数

Innodb_buffer_pool_read_ahead_rnd

记录进行随机读的时候产生的预读次数。
0次

Innodb_buffer_pool_read_ahead

预读到innodb buffer pool里次数。
1465370次。  单位page

Innodb_buffer_pool_read_ahead_evicted

预读的页数,但是没有被读取就从缓冲池中被替换的页的数量,一般用来判断预读的效率。 0次

Innodb_buffer_pool_wait_free

数据要写入buffer pool的时候,需要等待空闲页的次数。是指缓存池里没有干净页的时候读取或创建页,要先等待页被刷新。
2927次。 单位次数。

Innodb_buffer_pool_pages_dirty

buffer pool缓存池中脏页的数目。
0次。单位是page

Innodb_buffer_pool_pages_flushed

buffer pool缓存池中刷新页请求的数目。
15437744次。单位page

Innodb_buffer_pool_pages_misc

buffer pool缓存池中当前页已经被用作管理用途或hash index而不能用作为普通数据页的数目。
109次。单位page

Innodb_buffer_pool_pages_old

在旧区域存放着多少个页。
5249次。单位page

Innodb_buffer_pool_pages_made_young

移动到新区域的有多少个页。
353059次。单位page

Innodb_buffer_pool_pages_made_not_young

没有移动到新区域的有多少个页。
31725809次。单位page

  Buffer Pool使用率:14328.0/16382.0 *100=87.46%
  缓存读命中率: (529670886-941147)/529670886.0 *100 =99.82%
  实际占用空间是:16382 *16(页单位)*1024=268402688 字节。
上面给buffer_pool_size分配的凡268435456字节。

  1. 设置buffer_pool参数

    — 从134217728设置成268435456 (另一台mysql)
    SET GLOBAL innodb_buffer_pool_size= 268435456

  由于SHOW
VARIABLES下的参数还是静态值。当mysql重开时,上面的缓存设置以失效。

[root@xuegod64 ~]# systemctl stop mysqld.service
[root@xuegod64 ~]# systemctl start  mysqld.service

  重开后或134217728.如下图
  图片 16

  要永久改变,需要在操作系统里下vim my.cnf 来修改. 如下图所出示,
去丢#再定义值。

  图片 17

 

留下评论

网站地图xml地图