InnoDB Plugin特性介绍:让Buffer Pool不被污染

转自:一个故事@MySQL DBA 较之MyISAM的一个很大的优势是,InnoDB会缓存数据块。如果系统中的数据量并不大,或者或者活跃数据量并不大时,InnoDB会将这些数据块全部缓存到Buffer Pool(内存)中,这样可以最大限度的提高提供的响应速度,特别是读取。当用户请求需要查询数据块时,InnoDB会首先在Buffer Pool中查找数据,如果Buffer Pool中没有该数据块时,InnoDB会从磁盘上Load对应的数据块,并通过LRU算法替代当前Buffer Pool的缓存块。 1. Buffer Pool中LRU缺点、细节 这样LRU算法的一个缺点是,如果有某一个查询做了一次全表扫描(例如备份,临时DDL等),都可能会导致整个Buffer Pool中LRU链表中的数据块都被替换了,甚至很多热点数据也会被替换,而这些新进的数据块可能在这一次查询之后就再也不会被读到了。我们也称这种情况为“Buffer Pool被污染”了。 在InnoDB则引入了一些新的机制来避免这种情况。算法仍然是LRU算法,但是加上了中点策略(类似于MyISAM的key buffer中的midpoint strategy)。同时引入了参数innodb_old_blocks_time来控制Buffer Pool不被污染。 LRU链表中的数据分为两部分:Sublist of new和Sublist of old。后者包含访问最近没有访问的数据块(链表越后面的数据块,最近越没有被访问)。默认情况,前者占63%(5/8),后者37%(3/8)。 当数据块需要从数据文件中读取时,首先会放到old sublist的头部(midpoint)。然后,如果有对这个数据块的访问,那么就将这个数据块放到new sublist的首部。一般来说,一个数据块被取出后,立刻会有读取,也就很快会被放到new sublist的头部。一种糟糕的情况是,如果是mysqldump访问全部数据块,也就会导致所有的数据块被放到new sublist。这样Buffer Pool也就全部被污染了。 2. Buffer Pool中LRU队列如何防止污染 InnoDB Plugin通过引入如下的参数来防止“污染”: innodb_old_blocks_pct: 控制old sublist在LRU队列的长度 innodb_old_blocks_time:该参数决定了,当Block被插入到midpoint(old sublist)后,必须要在old sublist停留超过innodb_old_blocks_time(ms)时间后,才有可能被转移到new sublist。例如,将innodb_old_blocks_time设置为1000(即1s),当出现Table …

继续阅读 »

修复mysql表

MySQL修复表的方法我们经常会用到,下面就教您两个MySQL修复表的小技巧,希望对您学习MySQL修复表方面能有所帮助。 在长时间使用MySQL后,数据库可能会出现一些问题。大多数问题可以通过简单的操作进行快速修复。下面介绍两种MySQL修复表的方法。 1. myisamchk 使用myisamchk必须暂时停止MySQL 服务器。例如,我们要检修blog数据库。执行以下操作: # service mysql stop (停止MySQL) # myisamchk -r /datawhere/blog/*MYI # service mysql start myisamchk 会自动检查并修复数据表中的索引错误。 2. mysqlcheck 使用mysqlcheck无需停止MySQL,可以进行热修复。操作步骤如下:(检修 blog库) # mysqlcheck -r -uroot -p blog 注意,无论是 myisamchk还是mysqlcheck,一般情况下不要使用-f强制修复,-f参数会在遇到一般修复无法成功的时候删除 部分出错数据以尝试修复。所以,不到万不得已不要使用-f。 mysql 进程在一个写入中被杀死、计算机意外关闭、硬件错误都能造成mysql表损坏 。 mysql 修复表的各种方法 1、mysqlcheck …

继续阅读 »

tpcc-mysql安装和使用

转自:http://www.mysqlinfo.com 今天发现了percona出的Mysql-tpcc,找了半天相关文章只有一篇日文写的比较详细,结合其内容写出该篇文章。还 目前严格按照tpcc定义的规范实现的软件貌似只有DBT-2和mysql-tpcc俩个工具。 所以他们得出的结果值tpmC 相对来说比较准确。tpmC是代表每分钟事务处理的数量。一般仓库设置为40-100个为cpu bound,400-1000个是为了测试io bound。40以下无论事务多少,锁竞争情况也不太容易发生。下面的只是测试例子所以用的仓库很少 1 安装 开源项目https://code.launchpad.net/~percona-dev/perconatools/tpcc-mysql 首先获取源代码 yum install bzr bzr branch lp:~percona-dev/perconatools/tpcc-mysql 下载完目录结构如下 -rw-r–r– 1 root root 749 Mar 1 15:38 README -rw-r–r– 1 root root 1621 Mar 1 15:38 add_fkey_idx.sql -rw-r–r– 1 root root …

继续阅读 »

DBA的亲们应该知道的RAID卡知识

对于数据库这种特殊应用IOPS往往会成为瓶颈,突破的这个瓶颈的有效方法不多,软件方面主要是读写分离,垂直拆分,分区表技术,cluster。硬件方面主要是raid,和SSD。 通常都是软件和硬件同时优化,相对于成考考虑,硬件使用raid的情况较多,今天分享下硬件raid知识。 什么是raid? raid可以提供数据备份技术、扩展存储空间和提高存储性能。关于raid 0,raid 1,raid0+1,raid1+0,raid 5这些理论基础我就不重复提及了,google下很多的。 对于数据库应用,通常我们换选择raid1+0。他在磁盘空间成本和安全性方面和raid5差不多,但是在性能方面(IOPS)却明显优越于raid5,所以对于OLTP系统,我们一般使用raid1+0。

mysql技术内幕-innodb存储引擎读书笔记(下)

第六章、锁 锁是区别文件系统和数据库系统的一个关键特性。 6.1、什么是锁? 锁是用来管理对共享文件的并发访问。innodb会在行级别上对数据库上锁。不过innodb存储引擎会在数据库内部其他多个地方使用锁,从而允许对不同资源提供并发访问。例如操作缓冲池中的LRU列表,删除,添加,移动LRU列表中的元素,为了保证一致性,必须有锁的介入。 6.2、innodb存储引擎中的锁 6.2.1、锁的类型 S lock 共享锁 允许事务读一行数据 X lock 排它锁 允许事务删除或者更新一条数据 IS lock 意向共享锁 事务想要获得一个表中某几行的共享锁

十分钟理解数据库范式

数据库范式是DBA必知必会的知识,但是很多半路出家的DBA确往往忽略了这部分知识。 eugene面试问应聘者时,爱问int(n)、varchar(n)这里N代表的含义,如果我面试应聘者,我肯定会问范式的相关问题。 为了不难住大家,下面我以一个game dba的角度给大家简单分享下我对范式的认识。 范式简介: 范式的英文名字叫 normal from,他是美国人E.F.Codd在上世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库的理论基础。 要学习范式,我们先学习几个关于范式的术语,当然为了方便大家理解,这里只是列出了部分常用的术语,如果要完整深入的 学习,请查考相关数据库书籍。 实体:任何事物都是一个实体,对于游戏数据库来说,一个玩家是一个实体,一个游戏道具是一个实体。 属性:实体具有的某个特性,比如玩家的角色名,等级,性别等,通常属性可以看做表中的一列。 元组:表中的一行就是一个元组。 码:表中可以唯一确定一个行(元组)的某个属性或者属性组叫做码。这里的码一般就是数据库表中的唯一索引,一个表中可以有多个唯一索引,这些唯一索引统称候选码,如果从多个唯一索引中选一个出来作为主键,这个主键叫做主码。 有一些基础的术语知识后,我们来了解范式。 目前关系数据库有六种范式:第一范式、第二范式、第三范式、第四范式、第五范式、第六范式。 满足范式的要求是递增的,也就是要满足第二范式,必须先满足第一范式,要满足第三范式,必须先满足第二范式.类推… 由于第四范式、第五范式、第六范式总要是用于消除冗余数据,现在的存储空间已经比较充裕,并且适当冗余存储可以提高查询的效率,所以当前的数据库设计,一般满足前三个范式即可。 第一范式、无重复的列 这个范式是关系数据库的基本要求,如果不满足,那你的表就不是关系数据库。 要求:数据库中的每一列是具有原子性,不可以拆分的。 如果某个列变成了二叉树那样,那就不是关系数据库了。 第二范式、属性 要求:所有属性完全依耐于主码,消除非候选码对主码的部分函数依耐。 通俗理解:所有属性完全依耐于主键,消除非主属性对主键的部分函数依耐。 通过一个玩家和家族关系的表来说明吧。 CREATE TABLE `family` ( `userid` varchar(34) NOT NULL DEFAULT ”, `familyid` int(11) NOT NULL …

继续阅读 »

mysql技术内幕-innodb存储引擎读书笔记(中)

第四章、表 4.1、innodb存储引擎表类型 innodb表类似oracle的IOT表(索引聚集表-indexorganized table),在innodb表中每张表都会有一个主键,如果在创建表时没有显示的定义主键则innodb如按照如下方式选择或者创建主键。 首先表中是否有唯一非空索引(unique not null),如果有则该列即为主键。 不符合上述条件,innodb存储引擎会自动创建一个6字节大小的指针,rowid(). 4.2、innodb逻辑存储结构 innodb的逻辑存储单元由大到小分别是 tablespace,segment,extent,page(block)组成。 4.2.1、表空间(tablespace) 大部分内容和3.6.1章节相同,可以通过产生undo操作来验证共享表空间存储undo的信息,也可以通过py_innodb_page_info.py来查看表空间文件中各页的类型和数量。 4.2.2、段(segment) 常见的segment有数据段、索引段、回滚段。 由于我们刚才说过,innodb是索引聚集表,所以数据就是索引,索引就是数据,那么数据段即是B+树的页节点(leaf node segment),索引段即为B+树的非索引节点(non-leaf node segment).innodb的segment是innodb自动完成的,不许要人工参与。 4.2.3、区(extend) 区是由64个连续的页主成,每个页大小为16K,即每个区的大小为(64*16K)=1MB,对于大的数据段,mysql每次最多可以申请4个区,以此保证数据的顺序性能。 对于innodb_file_per_table参数的特殊情况,开启这个参数后,默认创建的表空间大小为96K。 区是64个连续的页,应该创建1M才对啊?原因就是每个段开始时有32个页大小的碎片页(fragment page)来存放数据,当这些页使用完成以后,才是32+64个连续页的申请。具体参见P75的实验。 4.2.4、页(page) 页是innodb磁盘管理最小的单位,innodb每个页的大小是16K。常见的页类型有: 数据页 B-tree Node undo页 Undo Log Page 系统页 System Page 事务数据页 Transaction system …

继续阅读 »

javascript学习笔记

javascript是网景公司的,java applet是sun公司的 javascript是页面中编写特效的,和HTML/CSS一样,都是由浏览器解析的。 需要学习的内容: 一、js如何运行 <script> </script> 在一个页面中所有的js代码是相通的。 二、输出 <script> //使用js代码 alert(“这里是一个提示消息”); //调试输出的消息,弹出框 document.write(“这个是通过js在网页上的输出”); </script> 三、如何在html中使用js 1、使用<script></script>将js语法嵌入到html中,可以使用多个,每一个之间都是关联的 2、<a href=”javascript:alert(‘hello,word’);”>demo</a> //点击链接,执行js代码 3、<form action=”javascript:js代码”></form> //表单提交执行js代码 4、<div onclick=”alter(‘$$$$$$$’)”>hello</div> //事件处理 5、外部调用js文件,在file.js中直接写入js语法,在html使用<script src=”file.js”></script> <script> location=’index.php’; </script> //页面跳转 js语法: 命名规范: 1、命名需要有意义 2、不能以数字开始,不能是系统的关键字 3、区分大小写,变量名和函数 :第一个单词小写,以后每个单词首字母大写 对象 :每个单词首字母都要大写 …

继续阅读 »

DBA的亲们应该知道的RAID卡知识

对于数据库这种特殊应用IOPS往往会成为瓶颈,突破的这个瓶颈的有效方法不多,软件方面主要是读写分离,垂直拆分,分区表技术,cluster。硬件方面主要是raid,和SSD。 通常都是软件和硬件同时优化,相对于成考考虑,硬件使用raid的情况较多,今天分享下硬件raid知识。 什么是raid? raid可以提供数据备份技术、扩展存储空间和提高存储性能。关于raid 0,raid 1,raid0+1,raid1+0,raid 5这些理论基础我就不重复提及了,google下很多的。 对于数据库应用,通常我们换选择raid1+0。他在磁盘空间成本和安全性方面和raid5差不多,但是在性能方面(IOPS)却明显优越于raid5,所以对于OLTP系统,我们一般使用raid1+0。 下面我们开始进入正题,raid硬件知识,当然,我们只是站在应用的角度去探讨raid硬件设备的性能和安全。 缓存 对于一块中高端的RAID,缓存是必不可少的。一般raid卡使用的DDR2内存颗粒,和我们的内存条几乎相同,adaptec的缓存叫DRAM,根据硬件技术的发展DDR3肯定会跟上的。 说到缓存技术就必须说一下两种缓存模式。 write through 系统的写入请求直接写入硬盘,安全性很高,性能很低。 write back 系统的写入请求先存放到缓存,再根据时机统一回写到硬盘中,由于缓存的写速度远远高于磁盘,所以这种方式性能可以大大提高。 BBWC 为了挖掘更好的RAID写入性能,饥渴的DBA肯定想打开write back功能,让咱的数据库飞起来。但是这个时候出现了一个非常严重的安全问题,就是突然断电导致数据丢失的问题(上面提过raid卡使用的是RAM存储器,断电丢失数据,但是系统层已经认为这些数据已经写入硬盘,所以系统层不能提供任何保护措施),数据丢失对于DBA的亲们肯定是不能接收的。那该如何呢? 针对这个问题出现了BBWC–Battery-Backed Write Cache.BBWC的核心就是BBU电池备份单元,它就是一块锂电池,在系统开机的情况下处于充电状态,一旦遇到断电,就会给缓存提供刷新所需的电流,保持数据不丢失,直到下次开机时把数据写回到磁盘上。有的BBU和raid卡的内存做在一个模块上,有些是raid卡通过一个连接线连接一个电池。 BBWC的缺点: 1、每隔1-2年需要跟换电磁,维护麻烦,管理员容易忘记这个事情,如果机器不很远的机房单独去机房换电池,成本就高了。 2、更换电磁需要停机,并且需要把机器下架,拆开。 3、由于电池也是一个故障点,所以需要管理员花更多的时间来关心电磁的工作情况 4、电池能够提供的供电时间最多72小时,初始化需要充电数小时才能使用 5、电池不环保 FBWC 针对BBWC的缺点,出现了FBWC –Flash-Based Write Cache。 FBWC的原理就是再系统以外停电的时候,利用一组“超级电容”中存储的电量,在较短的时间内(大约1分钟),将缓存中的数据备份到RAID卡上的大容量FLASH闪存中,知道下次开机再把数据回写到硬盘中。 FBWC和BBWC几乎完成的目的是一样的,但是实现方式不同。 FBWC的优点: 1、不需要维护,这点就把管理员们解决出来了 2、数据可以在flash中保存很多年 …

继续阅读 »

【原创】的50道linux基础题-大牛们还hold住么

基础篇(满分100分) 一、选择题(每个2分) 1、rm –rf / 命令会产生怎么样的效果( ) A、删除当前目录的所有文件和目录 B、删除当前目录的所有目录 C、删除硬盘上所有文件 D、删除/分区下所有文件和目录 2、以下描述正确的是( )多选 A、1Byte = 1024bit B、1KB = 1024B C、1MB = 1024KB D、1GB = 1024MB 3、用什么表示主板上第三个SATA接口上的硬盘的第4个分区()多选 A、/dev/sda4 B、/dev/hdc4 C、/dev/sdc4 D、/dev/sdc5 4、关于MBR描述正确的有()多选 A、MBR又叫做主引导分区(Master Boot Recorder) B、MBR分区表仅能保存四个分区记录 C、MBR主要记录了引导程序和磁盘分区表 D、MBR不是必须的,可以删掉 5、在安装系统的时候,必须的分区是() A、/boot B、swap …

继续阅读 »