- 博客(29)
- 资源 (1)
- 问答 (3)
- 收藏
- 关注
原创 innodb io管理
Before writing pages to a data file, InnoDB first writes them to a contiguous tablespace area called the doublewrite buffer. Only after the write and the flush to the doublewrite buffer has completed d
2016-05-25 17:31:51 543
原创 innodb文件格式
参数innodb_file_format定义了文件格式 Antelope是原本的文件格式,支持compact和redundant行格式。 Barracuda是最新的文件格式,支持所有的行格式,包括compressed和dynamic行格式, 5.6默认的是Antelope,5.7是Barracuda 待补充
2016-05-25 17:14:06 620
原创 mysqldump详细了解
mysqldump –single-transaction –all-databases > backup_sunday_1_PM.sql 这个备份的命令会使用flush tables with read lock获取一个全局读锁。 这个锁一旦被获取,二进制日志协调器被读取锁被释放,如果在语句被执行的时候,有长的更新语句,备份的操作会被拖延到语句结束。之后dump会变成lock-free的状态不
2016-05-22 20:30:37 534
原创 innodb表压缩
表压缩能提升性能,减少存储空间,主要是用在包含很多字符的表上,并且读要比写多的情况下,也就是在数据仓库的情况下应用居多 在使用表压缩的功能时候, innodb_file_per_table这个参数要启用,innodb_file_format这个参数设置成Barracuda,对比下看看效果 CREATE TABLE compressed_tab ( TABLE_CATALOG varcha
2016-05-22 17:21:06 2018
原创 mysql5.7json使用
create table t1(jdoc json); insert into t1 values(’ { “hey”: “guy”, “anumber”: 243, “anobject”: { “whoa”: “nuts”, “anarray”: [ 1, 2, “three” ], “more”: “stuff” }, “awesome”: true, “bogus
2016-05-17 18:56:18 5039
原创 mysql传输表空间
mysql也有传输表空间,跟oracle功能也一样,就是讲表空间从一个数据库拷贝到另一个库。 这个功能有如下的限制innodb_file_per_table要设置on当表quiesced的时候,在受影响的表上只能做只读操作当导入表空间的时候,page大小要一致discard表空间不被分区表支持,也就是分区表也不支持传输表空间。alter table…import tablespace 不
2016-05-15 22:54:57 1526
原创 mysql分区表的维护
范围,list分区表维护 删除分区 ALTER TABLE tr DROP PARTITION p2; 添加分区 ALTER TABLE members ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000)); 如果添加的分区比第一个分区小,就需要重新组织分区 ALTER TABLE members REORGANIZ
2016-05-15 15:21:57 1048
原创 mysql中的分区表
先通过show plugins来查看服务器是否支持分区表 源码编译的要想支持分区表,需要设置 -DWITH_PARTITION_STORAGE_ENGINE 选项 分区的类型 mysql的分区类型要比oracle10g的分区类型多几种,下面是mysql的分区类型范围分区列表分区列分区hash分区键分区子分区 范围分区,这个跟oracle一样,就是按列值得范围划分分区,在建表的时候
2016-05-15 14:00:17 772
原创 mysql监控器
有4中类型的innodb监控器; 1标准监控器,展示下面的内容每个事务持有的表和记录锁事务的锁等待线程的信号量等待悬挂起来的文件io请求buffer pool统计主要innodb线程的purge,changebuffer合并的活动 2锁监控器打印额外的锁信息 3表空间监视器,打印共享表空间的segments信息和验证表结构,看来这个没什么用,果然是没啥用,要被移除了 4表监视器打
2016-05-14 16:45:29 943
原创 mysql的行转列
select * from ta; +——+——+——-+ | id | num | value | +——+——+——-+ | 17 | 1 | 2 | | 17 | 2 | 3 | | 17 | 3 | 4 | +——+——+——-+select id,max(IF(num = 1,value,0)) as ‘1’ ,ma
2016-05-12 19:44:56 457
原创 mysql sql优化
explain -> select -> a.id,b.shop_id,b.erp_store_id,b.shop_name,a.order_id, -> SUM(a.amount) amount, -> SUM(b.ware_total_price) wareAmount, -> SUM(b.promotion_price)
2016-05-10 18:24:29 548
原创 mysql next-key lock 复杂的锁
这个东西很晕啊,oracle不会有这个东西,官方文档看的也不是很明白,还要继续探索下 对于https://segmentfault.com/q/1010000002444402这个问题,我也遇到了,一直没有明白是怎么产生的。而且在rc的级别下也是遇到了在2个会话中删除不同行的时候,产生了阻塞,这个阻塞是在索引上的产生的,就是在二级索引上添加的也不是真正的行锁。 mysql的锁还是很负载的。
2016-05-09 20:49:16 1054
原创 mysql存储过程批量删除数据
在数据量很大的情况下,如果要删除大量数据,直接删除可能会导致mysql复制卡死,可以通过批量删除的方式来快速的删除大量数据DELIMITER $$DROP PROCEDURE IF EXISTS ‘delrows’$$CREATE PROCEDURE delrows() BEGIN DECLARE rn int default 0;SELECT count(*) into rn FROM b
2016-05-09 19:12:47 6724
原创 mysql中的行锁
mysql的行锁跟oracle的行锁不一样的,mysql的行锁基于索引 参考:http://blog.itpub.net/7314177/viewspace-734477/ session A: test>select * from d; +——+——+ | id | name | +——+——+ | 1 | aa | | 2 | bbb | +——+——+
2016-05-09 17:05:00 3864
原创 mysql死锁几种情况的测试
sessionA: test>begin -> ; Query OK, 0 rows affected (0.00 sec)test>select * from tt where id_test=1234 lock in share mode; +—-+———+ | id | id_test | +—-+———+ | 4 | 1234 | +—-+———+ 1 ro
2016-05-09 16:58:28 10139
原创 聚集索引和二级索引
每个innodb的表都有个特殊的索引来存放数据-聚集索引。 当在表上指定主键后,innodb使用它来作为聚集索引。 如果没有定义主键,会找非空唯一索引来作为clustered index 如果上面2个都没有,那么会在内部生成一个隐藏的clustered index 通过一个clustered index访问行是很快的,因为索引包含全部数据的页。 所有的非clustered index都是二
2016-05-09 16:03:30 2237
原创 mysql undo日志 redo日志
redo的日志存放在操作系统上,名称类似ib_logfile0和ib_logfile1, redo相关的选项: innodb_log_file_size innodb_log_files_in_group innodb_log_group_home_dir redo的刷新是采用的组提交模式,没事每次提交都刷新,一组刷新中,一次写可以包含多个用户同时提交的数据,这样提高了效率。默认情况下und
2016-05-07 13:53:24 1501
原创 innodb的多版本控制
inndo也是通过跟oracle类似的回滚段来实现多版本,内部实现中,innodb会添加3个字段到数据库中的每个记录上,一个6byte的DB_TRX_ID表示最后插入或更新的行的事务标识符,删除在内部被表示成更新用一个标记为来标识这行被删除了。还有个7byte的DB_ROLL_PTR来执行undo log的记录,如果一行被更新了,那么undo log记录信息能重构被更新前的内容,一个6byte的DB
2016-05-07 13:36:58 3217
原创 mysql在线ddl操作
mysql5.6开始支持在线ddl,在线ddl能够提供下面的好处;1提高生产环境的可用性2在ddl执行期间,获得性能和并发性的平衡,可以指定LOCK从句与algorithm从句,lock=exclusize会阻塞整个表的访问,lock=shared会允许查询但不允许dml,lock=none允许查询和dml操作,lock=default或是没有指定,mysql使用最低级别的锁,algorith
2016-05-07 12:52:37 5875 1
原创 lvm中磁盘映射查看
在linux上使用lvm划分磁盘,使用iostat命令会看到下面dm的磁盘Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %utilxvde 0.00 0.00 79.67 15.33 777.
2016-05-06 17:23:26 2349
原创 mysql自增主键在大量删除后如何重新设置避免断层
select * from tt;+----+| id |+----+| 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 |delete from tt where id=8;Query OK, 1 row affected (0.01 sec)delete from
2016-05-06 10:39:58 15659 2
原创 gcc
gcc -ggdb3 -Wall -o test2 test2.c 使用调试符号编译ulimit -c unlimited./test2异常后会产生core文件gdb test2 core.12107rbt可以看到出错的堆栈,找到出问题代码的行gcc -O1(2,3)优化,一般在开发最后阶段使用3个文件,分开编译,然后再组成一个,每个文件的修改不影响别的文件g
2016-05-05 23:48:14 418
原创 mysql复制的过滤
在master上,可以使用--binlog-do-db和--binlog-ignore-db来控制二进制日志,进而控制哪个数据库和表被复制,也可以在slave上使用过滤来控制执行的事件。在slave上,可以根据--replicate-*的选项来控制是否执行来自master上的语句。控制表级别的复制的选项是--replicate-do-table --replicate-wild-do-ta
2016-05-05 19:17:15 505
原创 mysql双master配置
mysql能进行双master配置,也就是A是B的slave,同时B是A的Slave,A,B2台机器上同时运行着2套复制的环境,a,b的机器还可以是别的机器的master,双master上面放个负载均衡器,可以减小单master的压力,但多个server对同个表插入的时候,自增主键就有可能冲突,可以设置auto_increment_increment,auto_increment_offset这两
2016-05-05 17:59:18 986
原创 因为锁等待导致的慢查询不会改变状态变量slow_queries值
none)>show global status like 'Slow%';+---------------------+-------+| Variable_name | Value |+---------------------+-------+| Slow_launch_threads | 0 || Slow_queries | 8
2016-05-05 15:57:34 1763
原创 mysql复制
mysql的复制是异步的,所以slave机器不是一直连接来接受master上的更新,在5.6版本支持半同步复制,在半同步中master在至少一个slave接收更新并写入中继日志返回确认信息后才会提交,5.6也支持延时复制,slave的机器故意的延时至少指定的时间来复制。5.6.5之后开始支持基于全局事务标识符的事务的复制,当使用这种方式的复制时候,不必直接的使用log 文件或这些文件中的位置,很大
2016-05-03 19:11:34 455
原创 mysql大页内存的使用
一些系统支持内存页大于默认的4KB,有很多内存访问的应用通过使用大页内存可以减少Translation Lookaside Buffer的缺失。在mysql中,大页内存可以被InnoDB使用,来分配buffer pool和别的内存查看是否支持大页内存shell> cat /proc/meminfo | grep -i hugeHugePages_Total: 0Hu
2016-05-02 11:53:03 2420
转载 mysql磁盘设置
StripingStriping means that you have many disks and put the first block on the first disk, the second block on the second disk, and the N-th block on the (NMOD number_of_disks) disk, and so on
2016-05-02 11:04:32 691
翻译 mysql查询缓存
这个功能跟11g的结果集缓存是一个东西,查询缓存存放的事select的文本和对应的结果集,如果客户端来个查询,发现对应的结果在结果集中,直接返回不用去解析执行语句了,查询缓存在会话中是共享的,所以一个客户端的结果集能被别的会话使用。这个功能在表不是很频繁变动的情况下使用,查询结果集不会返回过期的数据,如果表被修改,相关的数据被刷新。查询结果集被用于预定义语句,不支持分区表。为了关闭查询
2016-05-02 09:23:05 848
TA创建的收藏夹 TA关注的收藏夹
TA关注的人