自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 线上Redis超时问题排查

问题描述最近线上的程序经常报错,redis command timed out 报错信息如下org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException: Command ti...

2019-09-29 17:19:15 3939

翻译 InnoDB Row formats

表的行格式(row format)决定了表中的行是如何物理存储的,修改它会影响到查询或者DML语句的性能。大部分的行会尽量将单行存储在单一的磁盘页中,这样能让查询或者索引查询运行更快,在buffer pool中更小的内存空间消耗和更少的IO请求。表中的所有数据被拆分到多个page中,组成每个表的页数据放在排好序的B树索引中,表数据和二级索引都是采用这样的数据结构。变长字段列(varchar...

2019-07-12 16:11:21 418

翻译 启用InnoDB标准监控输出

InnoDB监控有两种类型:一种是标准InnoDB监控(standard InnoDBMonitor)和 InnoDB 锁监控(InnoDB Lock Monitor),锁监控会作为标准监控的一部分打印出来。启用InnoDB 监控当InnoDB监控启用后,InnoDB会每隔15秒写入监控日志到mysql 标准错误日志文件中(mysqld server standard error out...

2019-07-05 16:52:20 908

翻译 Mysql备份和恢复

备份和恢复的类型物理备份VS逻辑备份物理备份由存储数据库内容的目录和文件的原始副本组成。这种备份类型适用于当发生问题需要快速恢复的大量的重要的数据库。逻辑备份将信息保存为逻辑数据库结构(通过CREATE DATABASE, CREATE TABLE 语句)和内容(insert 语句或者适用分隔符的文件)。这种备份方式适用于少量的数据,你可以在上面编辑数据值或者表结构,或者在一个异构的服...

2019-07-03 15:41:57 143

翻译 InnoDB表的限制

最大值和最小值一个表最多可以有1017列(MySQL5.6.9之前是现在1000)。这个限制包含了虚拟生成的列。 一个表最多可以有64个二级索引(secondary indexes). 如果启用了 innodb_large_prefix(默认启用),使用动态或者压缩的行格式的表,索引键的前缀限定最大长度为3072 bytes。如果未启用 innodb_large_prefix,则所有的行格...

2019-07-01 17:49:46 525

翻译 InnoDB的锁

在InnoDB中主要有以下几类锁:共享锁(shared lock)和排他锁(exclusive lock) 意向锁(intention locks) 行锁(record locks) 间隙锁(gap locks) next-key locks 插入意向锁(insert intention locks) 自增长锁(auto-inc locks) Predicate Locks fo...

2019-06-30 17:35:57 170

翻译 InnoDB 预读

预读(read-ahead)操作是一种IO操作,用于异步将磁盘的页读取到buffer pool中,预料这些页会马上被读取到。预读请求的所有页集中在一个范围内。InnoDB使用两种预读算法:Linear read-ahead:线性预读技术预测在buffer pool中被访问到的数据它临近的页也会很快被访问到。能够通过调整被连续访问的页的数量来控制InnoDB的预读操作,使用参数innodb_r...

2019-06-29 17:06:05 1725 2

翻译 InnoDB Buffer Pool

Buffer Pool是主内存中用来缓存被访问的数据和索引的区域,它允许经常被访问的数据直接在内存中执行,来提高执行速度。在专用的服务器上,建议分配80%的物理内存给buffer pool.为了提高高容量读操作,buffer pool被划分成了包含多行数据的页(page),为了缓存管理的效率,buffer pool被实现为一个页的链表;使用LRU算法来淘汰最近很少被使用的数据。了解如何利用...

2019-06-28 22:50:22 388

原创 Innodb整体架构

如下图展示了Innodb内存中和磁盘的结构:内存中结构主要有如下几种:buffer poolchange bufferadaptive hash index (自适应的hash索引)Log buffer磁盘中的结构主要有下面几类:TablesIndexsTablespacesInnodb Data DictionaryDoublewrite bufferRedo log...

2019-06-28 17:02:43 139

原创 InnoDB Multi-Versioning

InnoDB 是一个数据多版本的存储引擎,它会保持它修改的数据的旧版本数据以此来支持事务特性,比如并发操作和事务的回滚。这些旧版本数据存储在一个叫做rollback segment的数据结构中(回滚段),当事务回滚的时候,Innodb会使用回滚段的数据来执行事务的撤销操作,也会使用这些老版本的数据来做旧版本的一致性读操作(可重复读的隔离级别下需要用到)。在Innodb内部会增加三个字段存储相关信...

2019-06-28 16:59:59 78

原创 MySql支持的数据类型

今天总结一下MySQL中支持的数据类型首先从大体上看,MySQL支持的类型有如下几种,数值类型,日期类型,字符串类型。一 数值类型1 ,BIT[(M)]      比特类型,M代表每个比特位的数量,从1到64,默认值是12,TINYINT      非常小的整数,有符号的取值是 -128到127,无符号的取值是 0-255,占用一个字节3,BOOL, BOOLEAN...

2018-09-01 10:50:32 278

转载 MySQL中myisam和innodb的主键索引有什么区别?

MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图:这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key...

2018-08-27 09:12:25 2101

转载 RocketMQ与Kafka对比

淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011年初,Linkin开源了Kafka这个优秀的消息中间件,淘宝中间件团队在对Kafka做过充分Review之后,Kafka无限消息堆积,高效的持久化速度吸引了我们,但是同时发现这个消息系统主要定位于日志传输,对于使用在淘宝交易、订单...

2018-08-18 14:54:17 163

原创 Mysql死锁引起的事务未回滚问题

今天之前的同事问我,之前我负责的系统出现了MySQL异常,但是事务却没有回滚,事务前半部分执行的SQL在数据库能看到,日志信息如下org.springframework.dao.DeadlockLoserDataAccessException: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQ...

2018-08-01 12:53:26 2608

原创 ElasticSearch启动报错

今天在启动elasticsearch的过程中发现启动报错,报错内容如下:[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144][2]: system call filters failed to install; check the logs and fi...

2018-07-27 11:00:41 1145

原创 Mysql事务隔离级别的注意事项

数据库的事务隔离级别有4个级别,分别是 READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLEREAD-UNCOMMITTED指一个事务能读到另外一个事务还未提交的更新,READ-COMMITTED是指一个事务能读到另外一个事务以及提交的更新,REPEATABLE-READ是指一个事务中对一条数据的多次读取都是同一个值,既...

2018-07-23 22:54:20 207

原创 rocketMq的延迟消息分析

之前在项目中引入了RocketMq这个消息中间件,用于系统异步以及系统间解耦,在很多场景还用到了rocketMq的延迟消息功能,一直很想知道延迟消息的实现机制,于是去翻看了一下源码,得到真相先来说说整体逻辑吧,rocketMq中需要预先定于延迟级别,如下:1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h你可以定于你自...

2018-07-16 23:36:57 1505 1

原创 Resource temporarily unavailable问题排除

今天在线上服务器做压测时发现一个很诡异的问题,测试并发量一上来服务器就报如下信息,这时候敲任何命令都没用了[code="java"]-bash: fork: retry: Resource temporarily unavailable[/code]测试停止压测后一会儿又恢复正常,日志中出现大量访问的创建Hbase的连接失败,甚至出现OOM异常,不能创建一个线程[code=...

2018-07-16 19:33:22 5088

原创 redis监控命令的使用

今天来总结一下redis常用的监控命令的使用1 info 列出redis各项信息,包括客户端连接,内存使用,持久化,节点状态,复制,CPU占用,集群相关以及内部key的数据等等信息[code="java"]127.0.0.1:6379> info# Serverredis_version:4.0.1redis_git_sha1:00000000redis_git_d...

2018-07-16 12:51:10 548

原创 redis配置文件解读

一直使用redis, 但是还没有怎么有机会去调优,互联网都喜欢使用redis来做高速缓存,所以也准备花点时间来研究一下redis的优化问题,首先从redis的配置文件着手吧,搞清楚配置里面能做哪些事,废话不多说,上配置# include /path/to/local.conf上面的配置主要是为了引入其他的配置文件,可以用来在引入的配置文件中定义一个模板配置文件。# bind 1...

2018-07-15 19:58:56 126

原创 记一次性能优化过程

最近接手一个推荐系统API,原有系统已经开发完成,但是性能无法满足预期的要求,于是着手优化,原有系统的压力测试数据如下: 请求全部到redis  QPS 在2000左右,请求全部到Hbase  QPS在500左右接手项目后首先自己先去测试服务器用ab 压测一下 性能如下:每秒处理的请求数只有 1200左右,非常不理想,首先想到的是项目使用的日志框架,因为在之前的项目中有因为同步日志影响...

2018-07-06 16:27:50 362

原创 mysql一次Waiting for table metadata lock问题解决

最近在测试环境的mysql执行一个alter table 语句时一直处于阻塞状态,通过 show processlist 查看线程一直处于Waiting for table metadata lock,排查了所有线程没发现有其他线程获取到锁,一直疑惑到底是什么线程持有了锁没释放,在网上查询得知MySQL在进行一些alter table等DDL操作时,如果该表上有未提交的事务则会出现 Wai...

2018-03-16 14:21:07 234

原创 Springbean生命周期

Springbean的完整生命周期大致如下:1、 首先实例化 BeanFactoryPostProcessor的实现类,执行它的postProcessorBeanFactory方法;2、 实例化BeanPostProcessor 的实现类;3、 实例化 InstantiationAwareBeanPostProcessor的实现类;4 、 执行 InstantiationAwa

2018-01-25 09:51:26 250

原创 死锁的预防和解除

产生死锁的原因主要是:(1)系统资源不足。(2) 进程运行推进的顺序不合适。(3)资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。 产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。(2) ...

2015-09-21 14:18:36 354

原创 java 里面volatile

Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到主内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。这样当多个线程同时与某个对象交互时...

2014-01-13 16:23:39 70

转载 MySQL性能优化的21个最佳实践

1. 为查询缓存优化你的查询  大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。  这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请

2013-12-30 11:42:49 614

转载 ibatis Could not find SQL statement to include with refid 'xxx' 问题

ibatis启动报错:Could not find SQL statement to include with refid 'xxx'。网上找的资料都是名称空间的问题,后来试着将这个被引用的sql片段放到使用它的sql前面,就可以了。这可能是一个bug吧,使用的时候注意就是了。注意:按照上面的配置好后,在Sql-Map-Config.xml中需要设置useStatementNa

2013-11-27 13:48:05 2130

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除