mysql 开辟升级篇体系 17 MySQL Server(key_buffer与table_cache)

发布时间:2019-09-05  栏目:MySQL  评论:0 Comments

一.key_buffer

  上一篇领会key_buffer设置,key_buffer_size内定了索引缓冲区的轻重,它决定索引处理的快慢,尤其是索引读的进程。通过检查情状值Key_read_requests和Key_reads,能够精通key_buffer_size设置是还是不是制造。比例key_reads
/key_read_requests应该尽恐怕的低,至少是1:100,1:一千越来越好(通晓为key_reads物理IO次数越少越好)。

--   一共有Key_read_requests个索引请求,一共发生了Key_reads次物理IO
SHOW GLOBAL STATUS LIKE '%key_read%';

图片 1

--  Key_reads/Key_read_requests ≈ 0.1%以下比较好
SELECT 693206.0/94745304.0

图片 2

  key_buffer_size只对MyISAM表起成效。纵然你不利用MyISAM表,可是当中的一时磁盘表是MyISAM表,也要动用该值,能够动用检查景况值created_tmp_disk_tables得知详细的情况。

SHOW GLOBAL STATUS LIKE '%created_tmp_disk_tables%';

图片 3

小结提出:

    对于1G内部存款和储蓄器的机械,倘诺不使用MyISAM表,推荐值是16M(8-64M)。
    单个key_buffer的尺寸不可能超过4G。
    建议key_buffer设置为大意内部存款和储蓄器的一半(针对MyISAM引擎),在广大情况下数据要新币引大得多。
    假使机器品质优越,能够设置多个key_buffer,分别让区别的key_buffer来缓存特地的目录。
    Key_reads/Key_read_requests的分寸平常境况下得小于0.01。

从这篇初阶,讲innodb存款和储蓄引擎中,对于多少个关键的服务器参数配置。那一个参数以innodb_xx
开头。

二. table_cache (table_open_cache)  

  上面讲了目录缓存,这里讲表缓存 table_cache,在mysql
5.1随后叫做”table_open_cache”。这一个参数表示数据库客商张开表的缓存多少(最大限制数),用于安装table高速缓存的数目。由于种种顾客端连接都会至少拜见三个表,因而此参数的值与max_connections有关。举个例子对于200个彼此运营的接连,应该让表的缓存至少有200 *
N。这里N是能够实践的查询的贰个一而再中表的最大数据(表数据)。
  表缓存机制是:当某一而再接访问三个表时,MySQL会检讨当前已缓存表的多少。假诺该表已经在缓存中开辟,则会直接访问缓存中的表已加快查询速度;借使该表未被缓存,则会将近来的表增多进缓存并举办询问。
  在实践缓存操作此前,table_cache用于限制缓存表的最大数据:假若当前已经缓存的表未达到table_cache,则会将新表增加进去;若已经达到此值,MySQL将依赖缓存表的末梢查询时间、查询率等法规释放此前的缓存(释放机制与sqlserver同样)。

-- 表缓存限制数(默认是2000次)
SHOW VARIABLES LIKE 'table_open_cache';    

  图片 4

-- 最大并发连接数
SHOW VARIABLES LIKE 'max_connections';

  图片 5

  能够经过检查mysqld的事态变量open_tables和opened_tables确定table_cache参数是或不是过小。
open_tables表示时下开采的表缓存数,若是实行flush
tables操作,则系统会关闭部分脚下从未动用的表缓存,而使得些状态值减小。opened_tables代表早就张开的表缓存数(历史的),会直接开展增加。实践flush
tables值不会降价扣。

-- 当前打开的表缓存数
SHOW  GLOBAL STATUS LIKE 'open_tables';

  图片 6

-- 曾经打开的表缓存数
SHOW  GLOBAL STATUS LIKE 'opened_tables';

  图片 7
  2.1演示下open_tables和opened_tables值的成形(在另一台mysql上拓宽)

     第一步:

-- 清空表缓存
FLUSH TABLES;
-- 查看值为1(代表当前连接)
SHOW  GLOBAL STATUS LIKE 'open_tables';

  图片 8

-- 历史值为111
SHOW  GLOBAL STATUS LIKE 'opened_tables';

  图片 9
  第二步:

-- 执行一个查询
SELECT COUNT(1) FROM User1
-- 再次查询当前缓存数
SHOW  GLOBAL STATUS LIKE 'open_tables';

  图片 10

--历史值也累加到113
SHOW  GLOBAL STATUS LIKE 'opened_tables';

  图片 11
  第三步:

-- 再执行一个相同查询,  会发现值没有增加,因为读的是缓存。
SELECT COUNT(1) FROM User1
SHOW  GLOBAL STATUS LIKE 'open_tables';

  图片 12

SHOW  GLOBAL STATUS LIKE 'opened_tables';

  图片 13

  1. innodb_buffer_pool_size的设置

三. 修改table_cache值      

  下面来品尝修改table_cache值, 依旧同样找到my.cnf
  [root@xuegod64 etc]# vim my.cnf
  图片 14

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

-- 服务停止重启后再次查看表缓存限制数。
SHOW VARIABLES LIKE 'table_open_cache';

  图片 15

        
这一个参数定义了innodb存款和储蓄引擎的表数据和目录数据的最大内部存款和储蓄器缓冲区大小,和myisam分裂,myisam的key_buffer_size只缓存索引键,而innodb_buffer_pool_size是同期为数据块和索引块做缓存的。那性格情与oracle是平等的,这么些值设得越高,访问表中数据供给的磁盘i/o就越少(物理I/O)。在二个专项使用的数据库服务器上,能够安装那一个参数达机械物理内部存款和储蓄器大小的50–五分四。思量点:在单身给
MySQL
使用的主机里,内部存款和储蓄器分配还富含系统应用,线程独享,myisam缓存等。还大概有允许的并发连接数。还恐怕有建议不用把它设置得太大,因为对物理内部存款和储蓄器的竞争恐怕在操作系统上形成内部存款和储蓄器调治。

四.table_cache总结

  open_tables是近些日子表缓存数,类似于sql server的逻辑查询而非物理查询。
该open_tables的值对设置table_cache值有关键的参谋价值。
  如果Open_tables的值已经八九不离十table_cache的值,且Opened_tables还在再三变大,则证实mysql正在将缓存的表释放以包容新的表,此时或然须求加大table_cache的值。上面那台mysql服务器便是这种状态,一九八六类似最大面积3000,且历史值还在时时四处变大。
如下图:
  图片 16

  相比相符的值提议:

  Open_tables / Opened_tables >= 0.85

  当前mysql的值:SELECT 1990.0/3286078.0=0.00061

  Open_tables / table_cache <= 0.95

  当前mysql的值:1990.0/2000.0=0.99500

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

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

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

    图片 18

  上边内部存款和储蓄器相当于203壹玖壹肆/1024.0=一九八三M。
2. buffer_pool 运营参数

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

  图片 19

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
VA安德拉IABLES下的参数都以静态值。当mysql重启时,下面的缓存设置将失效。

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

  重启后要么134217728.如下图
  图片 20

  要永远退换,需求在操作系统里选拔vim my.cnf 来修改. 如下图所示,
去掉#重新定义值。

  图片 21

 

留下评论

网站地图xml地图