[MySQL 版本差异] 丢失frm文件之后drop database的不同结果分析
背景
今天在讨论frm丢失后drop database失败的问题。简单复现如下。假设test库中有两个表t1, t2,执行如下脚本:
bin/mysql -uroot –socket=run/mysql.sock -e ”
drop database if exists test2;
create database test2;
use test2;
create table t1 like test.t1;
create table t2 like test.t2;
”
rm -f data/test2/t1.frm; Read more
原创文章,转载请注明: 文章地址[MySQL 版本差异] 丢失frm文件之后drop database的不同结果分析
MySQL数据库的字符集和copy_and_convert 字符集不同导致CPU资源额外消耗
关于copy_and_convert
在对MySQL做业务压力测试的时候,我们在perf结果中发现 copy_and_convert 是一个耗费cpu的操作。这个函数的意思,就是在字符集之间做内容转换。
如果源和目标的字符集相同,就可以直接用memcpy,这显然比做字符集转换(按字节或字长拷贝更快,和节省cpu)
当整个系统是CPU瓶颈时,我们希望能够减少这种cpu消耗。
一次查询涉及的拷贝
如果我们执行一个简单的select语句,会涉及到两部分的内容:metadata和data。MySQL的返回包是能够“自解析”的,也就是说不仅有内容,还有描述信息。这些描述信息我们称为metadata。
在将这两部分信息返回给客户端的时候,就涉及到字符串拷贝,如果源字符集和目标字符集不同,就需要作转换。 Read more
原创文章,转载请注明: 文章地址MySQL数据库的字符集和copy_and_convert 字符集不同导致CPU资源额外消耗
MySQL数据库从load data引发的死锁说起
十月 16, 2012 by 丁奇 · 7 Comments
一个线上项目报的死锁,简要说明一下产生原因、处理方案和相关的一些点.
1、背景
这是一个类似数据分析的项目,数据完全通过LOAD DATA语句导入一个InnoDB表中。为方便描述,表结构简化为如下:
Create table tb(id int primary key auto_increment, c int not null) engine=innodb;
导入数据的语句对应为
Load data infile ‘data1.csv’ into table tb;
Load data infile ‘data2.csv’ into table tb; Read more
原创文章,转载请注明: 文章地址MySQL数据库从load data引发的死锁说起
MySQL数据库中like语句及相关优化器tips
九月 27, 2012 by 丁奇 · 2 Comments
背景
MySQL中在对某个字段做包含匹配时可以用like。
先看这个结构和结果
| CREATE TABLE `tb` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` bigint(20) DEFAULT NULL, `title` varchar(128) NOT NULL,
`memo` varchar(2000) DEFAULT NULL, PRIMARY KEY (`id`), KEY `title` (`title`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> explain select * from tb where title like ‘%abcd%’; +—-+————-+——-+——+—————+——+———+——+——+————-+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +—-+————-+——-+——+—————+——+———+——+——+————-+ | 1 | SIMPLE | tb | ALL | NULL | NULL | NULL | NULL | 1 | Using where | +—-+————-+——-+——+—————+——+———+——+——+————-+ 1 row in set (1.65 sec) |
原创文章,转载请注明: 文章地址MySQL数据库中like语句及相关优化器tips
MySQL5.5数据库复制搭建报错之Could not initialize master info structure
九月 26, 2012 by Eugene · 5 Comments
【导读】
鉴于MySQL5.5数据库产品的性能提升不明显,软件产品稳定性不佳,且新增加的功能也不足突破,所以生产环境中只有几套应用使用MySQL5.5版本支撑,以培养与掌握MySQL5.5的经验和技术,所以个人对MySQL5.5系列的实战也不多。现有一个项目,因服务器配置的特殊性,以及业务特点、数据容量、数据访问等也非常特殊,不得不考虑采用MySQL5.5,且国内某mysql服务提供商技术人员指定要求的版本号为MySQL5.5.27。综合上述信息导致今天无意碰到一个MySQL数据库复制搭建过程中出现的错误信息,可能其他同行也可能会碰见,特此写一篇技术博文分享给大家。
(一) 环境描述
操作系统:Linux x3755-31 2.6.18-308.el5
硬件配置:2*8Core CPU,6*SAS*15K*600G,RAID1+0,256G MEM
原创文章,转载请注明: 文章地址MySQL5.5数据库复制搭建报错之Could not initialize master info structure
MySQL数据库主从复制加速工具Transfer2.0 发布啦
九月 3, 2012 by 丁奇 · 4 Comments
背景
Transfer是一个主从多线程同步工具,直接patch在MySQL中。2011年开发完成。于去年的12.12上线,并撑住高峰期主从,保证从库无延迟,使得应用能够直接从从库上读数据。
对Transfer1.0背景有兴趣的同学可以看我以前的一篇博客。
新功能
Transfer第一版本存在两个可改进的点:单表并发和事务支持。 Read more
原创文章,转载请注明: 文章地址MySQL数据库主从复制加速工具Transfer2.0 发布啦
MySQL数据库的IO操作
1.MySQL的文件及简介 Read more
原创文章,转载请注明: 文章地址MySQL数据库的IO操作
MySQL源代码的海洋中游弋 初探MySQL之SQL执行过程
五月 15, 2012 by admin · 15 Comments
Group by
原创文章,转载请注明: 文章地址MySQL源代码的海洋中游弋 初探MySQL之SQL执行过程
MySQL数据库中order by的实现 和 by rand() 和优化
五月 2, 2012 by 丁奇 · 2 Comments
有同学上周问了个问题 “MySQL数据库里面的order by rand()”是怎么实现的。我们今天来简单说说MySQL数据库里的order by。
几种order by的情况
乍一看这个问题好像有点复杂,我们从最简单的case开始看起。
用这个表来说明:(10w行数据)
Read more
原创文章,转载请注明: 文章地址MySQL数据库中order by的实现 和 by rand() 和优化
