[MySQL 优化] 移除多余的checksum

1.bug#64170

根据bug#64170的描述,一个page在读入内存时就已经计算了一次checksum:

buf_page_get_gen

       |–>buf_read_page   (buf0buf.c:2543)

              ->buf_read_page_low

                  ->buf_page_io_complete

                       ->buf_page_is_corrupted

                             ->page_zip_calc_checksum

2612     case BUF_BLOCK_ZIP_PAGE:

2613     case BUF_BLOCK_ZIP_DIRTY

       |–> success = buf_zip_decompress(block, srv_use_checksums);

在函数buf_zip_decompress中,当设置了innodb_checksums时(对应内部变量srv_use_checksums),则在需要先计算比比较checksum,然后才会调用page_zip_decompress解压。

也就是说,对于一个page,总共进行了两次checksum,第二次明显是多余的。在MySQL5.6.7也已经移除了第二次checksum。

PerformanceInnoDB: This fix removes redundant checksum validation on InnoDB pages. The checksum was being verified both when a compressed page was read from disk and when it was uncompressed. Now the verification is only performed when the page is read from disk. (Bug #14212892, Bug #64170)

根据Facebook的Mark Callaghan的测试,获得了5%的QPS提升。

.

.

2.bug#64715

在函数buf_LRU_free_block中,对于压缩page,即使是非脏页,也会去计算checksum,facebook为其增加了一个参数来控制,为false表示禁止这种行为,只checksum脏页

当buffer pool较小时,free list一般为空,这时候当需要从磁盘读取一个page后,就得从lru上驱逐一个block。因此会频繁的调用到buf_LRU_free_block

对于只读查询,这会减少一些CPU开销(简单的测试,很明显的usr cpu 从13%降到12%)

时间: 2024-09-28 16:46:40

[MySQL 优化] 移除多余的checksum的相关文章

LINUX上MYSQL优化三板斧

LINUX上MYSQL优化三板斧 现在MySQL运行的大部分环境都是在Linux上的,如何在Linux操作系统上根据MySQL进行优化,我们这里给出一些通用简单的策略.这些方法都有助于改进MySQL的性能. 闲话少说,进入正题. 一.CPU 首先从CPU说起. 你仔细检查的话,有些服务器上会有的一个有趣的现象:你cat /proc/cpuinfo时,会发现CPU的频率竟然跟它标称的频率不一样: #cat /proc/cpuinfo processor : 5 model name : Intel

MySQL优化简明指南

mysql|优化 一.在编译时优化MySQL  如果你从源代码分发安装MySQL,要注意,编译过程对以后的目标程序性能有重要的影响,不同的编译方式可能得到类似的目标文件,但性能可能相差很大,因此,在编译安装MySQL适应仔细根据你的应用类型选择最可能好的编译选项.这种定制的MySQL可以为你的应用提供最佳性能. 技巧:选用较好的编译器和较好的编译器选项,这样应用可提高性能10-30%.(MySQL文档如是说) 1.1.使用pgcc(Pentium GCC)编译器  该编译器(http://www

十大MySQL优化技巧

WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是一个大问题.希望本文能对大家掌握MySQL优化技巧有所帮助. 1. 优化你的MySQL查询缓存 在MySQL服务器上进行查询,可以启用高速查询缓存.让数据库引擎在后台悄悄的处理是提高性能的最有效方法之一.当同一个查询被执行多次时,如果结果是从缓存中提取,那是相当快的. 但主要的问题是,它是那么容易被隐藏起来以至于我们大多数程序员会忽略它.在有些处理任务中,我们实际上是可以阻止查询缓存工作的. 1. // query cache d

mysql优化小结

  1. 说到mysql,我们立刻想起它体积小.速度快.还开源的特点,所以它应用颇广.今天我们来总结一下mysql中最频繁的两个操作:插入和查询,的优化方法. 2.插入: 3.一.文本导入 4.使用LOAD DATA INFILE从文本下载数据这将比使用插入语句快20倍. 5.示例: 6.load data local infile 'C:/Users/DELL/Desktop/Description&Data/news1.txt' into table news (文件位置) 7.fields

【JAVA秒会技术之玩转SQL】MySQL优化技术(二)

MySQL优化技术(二) [前文连接]MySQL优化技术(一) (五)常用SQL优化 1.默认情况,在使用group by 分组查询时,会先分组,其后还会默认对组内其他条件进行默认的排序,可能会降低速度.这与在查询中指定order by col1, col2类似. 如果查询中包括group by但用户想要避免排序结果的消耗,则可以使用order by null禁止排序. 例子:   2.尽量使用左连接(或右连接)来替代普通多表联查.因为使用JOIN,MySQL不需要在内存中创建临时表.    s

MySQL 第九篇:Mysql 与 ORACLE 开发差异、Mysql 优化

我把MySQL的内容整理成9篇博客,学完这9篇博客虽不能说能成为大神,但是应付一般中小企业的开发已经足够了,有疑问或建议的欢迎留言讨论. Mysql 与 ORACLE 开发差异 一. 常用的基本数据类型对比 二. 常用 SQL函数以及其它语法差异 Mysql 优化 一. 数据库设计 a) 适当的违反三大范式. b) 适当建立索引. c) 对表进行水平划分(按照一个周期对表数据进行拆分). d) 对表进行垂直划分(对字段内容较长的字段进行拆分到一个新表). e) 选择合适的字段类型.能占用字节小的

案例:MySQL优化器如何选择索引和JOIN顺序

我们知道,MySQL优化器只有两个自由度:顺序选择:单表访问方式:这里将详细剖析下面的SQL,看看MySQL优化器如何做出每一步的选择. explain select * from employee as A,department as B where A.LastName = 'zhou' and B.DepartmentID = A.DepartmentID and B.DepartmentName = 'TBX'; 1. 可能的选择 这里看到JOIN的顺序可以是A|B或者B|A,单表访问方

mysql-如何打印出MySQL优化之后的SQL语句呢

问题描述 如何打印出MySQL优化之后的SQL语句呢 我们知道SQL优化的基本原则就是是我们的SQL或HQL满足数据库查询优化器,那么我们能够通过什么方式看到查询优化器优化之后的SQL语句呢? 解决方案 MySQL56打印sql语句mysql sql语句优化Mysql sql语句优化 解决方案二: http://blog.csdn.net/wocaonima123987/article/details/7980182

mysql 优化 left join

问题描述 mysql 优化 left join A(id,name,createtime) B(id,aid,name,createtime) b是a的记录表,a保留一条最新的记录,历史的移动到b中,因此一条a在b中有多条历史记录: 需求:当a在b中有记录时,则时间取b中对应记录的最早的创建时间,其他字段取a中的. 如果b中无数据,则取a中的全部数据 现在的解决方案是(由于数据敏感,以下为原数据表结构的对呀模型): -- 如果b中有记录: SELECT * FROM ( SELECT A.id,