`
丁林.tb
  • 浏览: 792558 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

InnoDB big-end问题和一个小优化

阅读更多

 

1、背景

  InnoDB引擎存储int类型时使用big-endian, MySQL使用litter-endian, 导致一个问题是在两个层之间拷贝int类型数据的时候必须用一个循环来处理,而不能直接memcpy 在引擎层返回数据量很大的情况下,很耗cpu

 

       在报表类的一些查询中,会访问大量的数据。我们有个项目的一个查询需要访问到1.4wbigint,这个时候cpu的消耗就体现出来了。

 

2、相关代码

目前使用的转换代码就是使用循环。

row_sel_field_store_in_mysql_format这个函数的作用是把数据从InnoDB格式转成MySQL格式,

 

如下:

ptr = dest + len;                                            

                                                             

for (;;) {                                                    

        ptr--;                                               

        *ptr = *data;                                        

        if (ptr == dest) {                                   

                break;                                       

        }                                                    

        data++;                                              

}

 

这里如果是bigint就需要循环8次。

 

       反过来的转换代码在row_mysql_store_col_in_innobase_format,也是类似的需要一个循环。

 

3、改进和效果

这一坨循环,O3编译以后的汇编代码下,如果是bigint,需要40条指令。而显然我们使用的时候,intbigint会很多。

因此考虑当len=48的时候,使用bswapbswapq实现。

 

修改后再用oprofile观察上面说到的一个统计查询压力下的结果,发现row_sel_field_store_in_mysql_format这个函数cpu占用率从50%下降到44%.

 

DB的多数情况下压力还是在io,因此这个改进的效果需要在特定场景下才能体现。 最近跟Oracle InnoDB工程师讨论的时候了解到会有一些专门针对减少汇编结果做的优化,就凑热闹把这个提了。

Patch内容: http://bugs.mysql.com/file.php?id=18018&text=1 基于5.5.22

0
0
分享到:
评论
2 楼 丁林.tb 2012-02-21  
isaac.198 写道
InnoDB就是mysql的存储引擎呀,为什么InnoDB是大端,mysql是小端呢?
你是指mysql读出数据放到内存里面是小端吗?

是的 MySQL是小端
1 楼 isaac.198 2012-02-16  
InnoDB就是mysql的存储引擎呀,为什么InnoDB是大端,mysql是小端呢?
你是指mysql读出数据放到内存里面是小端吗?

相关推荐

    14.8 InnoDB File-Format Management

    mysql5.6官方文档:14.8 InnoDB File-Format Management

    InnoDB事务-锁-MVCC

    InnoDB事务-锁-MVCC.pdf

    innodb_ruby-master.zip

    利用MySQL性能监控工具如SHOW STATUS、SHOW VARIABLES、SHOW ENGINE INNODB STATUS等,监控InnoDB的运行状态,及时发现和解决问题。 总结,MySQL的InnoDB存储引擎在提供强大功能的同时,也带来了丰富的优化可能性...

    innodb-java-reader:一个库和命令行工具,可以直接在Java中访问MySQL InnoDB数据文件

    MySQL InnoDB Java阅读器 innodb-java-reader是一个Java实现,用于直接访问MySQL InnoDB存储引擎文件。 使用库或命令行工具,它提供了只读功能,例如检查页面,通过主键,辅助键查找记录以及通过LSN或填充率生成页面...

    Introducing InnoDB Cluster--2018

    Set up and use InnoDB Cluster as an HA solution Migrate your existing servers to MySQL 8 Employ best practices for using InnoDB Cluster Configure servers for optimal automatic failover to ensure ...

    Innodb-Architecture-Performance-Optimization

    《Innodb架构、性能优化》是一份深入探讨MySQL数据库InnoDB存储引擎的文档,主要关注其架构设计和性能调优策略。InnoDB是MySQL中最常用的存储引擎,尤其在处理事务性和复杂查询方面表现出色。以下是对InnoDB核心概念...

    undrop-for-innodb

    yum install make gcc flex bison cd /root/undrop-for-innodb-master make 会产生三个文件c_parser innochecksum_changer stream_parser

    percona-data-recovery-tool-for-innodb-0.5.tar.tar

    percona-data-recovery-tool-for-innodb-0.5.tar.tar

    关于InnoDB的索引大小

    本篇文章将深入探讨InnoDB存储引擎中的索引大小问题,包括其影响因素、限制以及优化策略。 首先,我们来了解InnoDB索引的基本结构。InnoDB主要使用B+树(B-tree)作为索引的数据结构,无论是主键索引还是辅助索引。...

    InnoDB性能优化参数详解.docx

    InnoDB是MySQL数据库管理系统中的一个核心存储引擎,以其强大的事务处理能力和稳定性而闻名。对于高并发、大数据量的应用场景,优化InnoDB的性能参数至关重要。以下是对InnoDB性能优化参数的详细解析: 1. **innodb...

    MySQL数据页功能性能测试innodb-page-size

    5. `innodb_read_io_threads` 和 `innodb_write_io_threads` 分别设为 16,以优化 I/O 并发。 6. `innodb_io_capacity` 设为 2000,表示磁盘的理论 I/O 能力。 7. `innodb_log_files_in_group`、`innodb_flush_log_...

    Innodb 和 XtraDB 结构和性能优化

    Innodb 和 XtraDB 结构和性能优化 http://www.ossez.com/forum.php?mod=viewthread&tid=26839&fromuid=426 (出处: OSSEZ)

    InnoDB-undo-log与MVCC1

    而UPDATE操作则会执行一个相反方向的UPDATE,以逻辑方式还原数据。此外,undo log还用于实现MVCC,记录数据的历史版本,但这些版本仅服务于InnoDB自身的事务执行,不会永久保存。 与etcd的MVCC实现相比,尽管两者都...

    MySQL InnoDB 查询优化实现分析

    InnoDB 查询优化实现分析 -- MySQL

    PgDay-2017-Innodb-Architecture-Performance-Optimization.pdf

    InnoDB is the most commonly used storage engine for MySQL and Percona Server and is the focus for majority of storage engine development by MySQL and Percona Server teams. In this tutorial, we will ...

    mysql innodb 性能优化

    默认情况下,innodb的参数设置的非常小,在生产环境中远远不够用

    MySQL优化班视频.zip

    第11课、InnoDB-0223.avi 第12课、InnoDB2-0228.avi 第13课、InnoDB3-0302.avi 第14课、InnoDB4-0307.mp4 第15课、MySQL监控-0314.avi 第16课、MySQL监控2-0316.avi 第17课、MYSQL监控3-0321.avi 第18课、MySQL压测-...

    MySQL内核 INNODB存储引擎-卷1-高清-完整目录-2014年5月

    MySQL内核 INNODB存储引擎-卷1-高清-完整目录-2014年5月

    innodb-1.1-en.pdf

    官方文档,适用于MySQL5.5的innodb1.1版本用户指引。该早期的文档可以一定程度上用来学习innodb源码。

Global site tag (gtag.js) - Google Analytics