自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(121)
  • 资源 (3)
  • 收藏
  • 关注

原创 MySQL查询MyISAM表的阻塞session,Waiting for table level lock

今天遇到一个问题,一个同事给我截了一个图,上面有大量的“Waiting for table level lock”,问我怎么处理。我想当然了一下,myisam表都是表锁,并发的insert出现“Waiting for table level lock”不是很正常么,于是就把我的想法告诉他了:使用批量插入或者用lock...unlock; 包裹多条insert。过了一会儿,同事说解决了,并发过来一个截图,上面有一个对myisam表的select session。无语,wtf!其实这个问题如果仔细看一下是.

2021-02-19 17:32:49 19

原创 mysql语句的digest和sampling

语句的digest发生在解析器(parser)中,performance_schema中虽然作为digest其中一个存储的地方,但是并不计算digest(语句的归一化Normalization过程)。而仅仅是将parser计算出来的digest文本与digest SHA256哈希值进行转储。因此performance schema作为解析器计算digest的其中一个充分条件而不是必要条件。解析器计算语句digest只要下面三个条件中的任一个满足即可:1,Performance Schema diges.

2021-02-01 10:14:11 28

原创 [ERROR] [FATAL] InnoDB: Over 95 percent of the buffer pool is occupied by lock heaps or the adaptive

[ERROR] [FATAL] InnoDB: Over 95 percent of the buffer pool is occupied by lock heaps or the adaptive。这个问题是发生在mysql 5.7系列5.7.20及之前的版本,8.0系列8.0.3及之前的版本的bug,在5.7.21/8.0.4上已修复。在这个错误发生时,可以通过select * from performance_schema.memory_summary_global_by_event_name

2021-01-11 15:48:34 31

原创 mysql cpu飙高的处理案例2

被告知一个现场的mysql服务器cpu 100%了需要处理下,然后就接手了。说下处理过程。是一台windows机器,操作系统server 2008,CPU 4个物理核心,偏少。国际惯例,先检查各项指标,show engine innodb status 查看一下库总体状态,发现Log sequence number -Pages flushed up to 差不多500多M,而库的redo文件大小是2个512M,问题不大,但是谨慎起见,调到2个2G大小。Free buffers/Innodb_buffe.

2020-12-26 17:44:56 40 1

原创 MySQL加密连接与基于RSA的密码交换

随着mysql8.0的使用,mysql更换了创建用户时默认的密码认证插件,从之前的mysql_native_password插件更换为caching_sha2_password插件。新的插件要求使用连接加密的方式用于mysql server与client之间的tcp连接,或者如果不满足使用加密连接的条件下,改为使用通过rsa加密的密码交换。首先来看看加密连接。先看一张图:上面这张图描述了SSL/TLS协议在TCP/IP模型中的位置,Mysql通过在服务端与客户端之间的连接上使用ssl/tls协议实现

2020-12-17 19:40:23 81

原创 hive映射elasticsearch nested复杂数据类型,读取elasticsearch _id字段

先简单写一下,列出关键的部分,es的nested数据结构如何在hive中做映射,es-hadoop的jar包当然要包括在hive的classpath中,就不多说。这是es的索引结构,略去了不必要的内容{ "mappings": { "doc": { "properties": { "MotorVehicleID": { "type": "keyword" }, "InfoKind": { "t...

2020-12-11 15:33:40 86

原创 mysql:Row size too large (> 8126)

这个错误简单理解就是单行记录的合计最大大小超过了8126字节,那么根据文档描述的话,使用dynamic行格式的表行最大大小可以达到65536字节(因为mysql内部使用了2个字节来表示字段长度,因此可以表示最大65535的长度)。那么,从65536到8126,这其中57140字节去哪里了呢?这其实是因为mysql默认使用16k的page size,在每个data page中,除去header、footer部分,剩下的部分需要能容纳2行的内容,那么16384/2=8192就接近8126这个值了。另外,

2020-12-04 14:33:38 89

原创 mysql添加审计功能

mysql自身提供了审计功能,但是只有企业版可用。社区版的可以使用mariadb或者percona提供的审计插件来支持审计功能。使用的时候,要注意mariadb或者percona与mysql的版本对应关系。对于mariadb,可以看这里https://mariadb.com/kb/en/system-variable-differences-between-mariadb-and-mysql/其中的截图如下。对这张图,我个人是这样理解的:既然可以两两比较,那么就说明有兼容的基础,在此基础上做进一步.

2020-12-03 18:04:59 49

原创 mysql filesort源代码解析

filesort在核心代码前面还有很多辅助代码,辅助部分就不说了,重点放在核心代码部分。下面是一个调用栈:SELECT_LEX_UNIT::ExecuteIteratorQuery(SELECT_LEX_UNIT * const this, THD * thd) (/root/mysql-8.0.20/sql/sql_union.cc:1165)SELECT_LEX_UNIT::execute(SELECT_LEX_UNIT * const this, THD * thd) (/root/mysq

2020-12-02 14:32:09 55

原创 mysql global status 状态变量详解一,innodb%writ相关

Innodb_buffer_pool_write_requests:写入buffer pool的请求数。理论上这个数量也等于每一个提交的事务修改的buffer pool中页*次。同一个页在一个事务中只累加一次,多个事务修改同一个page累加多次。原因是每一个事务在commit时都会将自身修改的page添加到flush列表,每次添加一个page,都会累加Innodb_buffer_pool_write_requests。具体的实现是,每一个mtr有一个自身的memory stack来存储修改的page,这个结

2020-11-21 15:53:20 53

原创 mysql innodb 双写缓冲区关键代码实现

//buf0dblwr.cc /**这个算是双写缓冲区与外部交互的接口了*/dberr_t dblwr::write(buf_flush_t flush_type, buf_page_t *bpage, bool sync) noexcept { dberr_t err; /* 对于只读的,或者临时表空间数据,或者禁用双写缓冲区,或者双写缓冲区的实例配置为空的,跳过写double-wirte文件,直接将数据写入对应的数据文件 if (sr.

2020-11-20 17:31:28 43

原创 mysql innodb_flush_method 参数的各种取值及其影响

innodb_flush_method用来控制innodb的redo日志文件和data数据文件采用何种flush方法。类unix/linux操作系统的取值为:fsync/0 ,O_DSYNC/1, littlesync/2 ,nosync/3 ,O_DIRECT/4 ,O_DIRECT_NO_FSYNC/5。默认取值fsync ;windows操作系统下的取值为: unbuffered/0 , normal/1 。默认值unbuffered。先看看官方文档的说明:fsyncor0:InnoDB...

2020-11-16 19:41:28 77

原创 innodb_buffer_pool_reads、innodb_buffer_pool_read_requests分析与innodb 缓存命中率计算

澄清一下innodb buffer pool 缓存命中率(cachehit ratio)指标的计算,这个计算涉及到两个状态变量innodb_buffer_pool_reads和innodb_buffer_pool_read_requests。官方文档对这两个变量的解释如下:Innodb_buffer_pool_readsThe number of logical reads thatInnoDBcould not satisfy from thebuffer pool, and had...

2020-11-10 15:17:48 148

原创 MySQL Group Replication 节点重新加入集群时等待时间过长

Mysql 5.7.29 el7 版本,组复制有三个节点,搭建了innodb cluster,做故障切换测试,拔掉其中一个节点的网线,使节点因为网络原因被Expelled。切换成功后使用stop group_replication;start group_replication;进行恢复重新加入集群,当然也可以通过mysqlshell操作rejoinInstance,期间节点长时间处于recovering状态,查询performance_schema.replication_group_member_sta

2020-11-05 19:29:28 48 1

原创 精华帖

多处理器架构中并发的处理问题:内存栅栏。很详细解释了mysql中mutex锁实现中的atomic_thread_fence系统调用。高并发编程--多处理器编程中的一致性问题(上):https://zhuanlan.zhihu.com/p/48157076高并发编程--多处理器编程中的一致性问题(下):https://zhuanlan.zhihu.com/p/48161056https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.i.

2020-10-30 10:35:44 18

转载 补码原理

声明,以下内容为转载,原文地址:https://blog.csdn.net/leonliu06/article/details/78685197读了原文,个人有几点理解如下:4bit可以表示的无符号数为0~15,有符号数为-8~7;但是对于计算机来讲,是无所谓正数或者负数的,计算机只需要不断的加(进位),然后取模就可以了。 溢出的过程可以看做是取模的过程。例如补码的推导过程中的最后:0101 + 1101 = 10010,最高位的1表示16,取模/溢出的过程就是将16去掉,变成0010=2..

2020-09-28 11:37:36 69

原创 MySQL ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

这个错误的本质发生在同一张innodb表上的两个事务的锁阻塞。并发的两个事务,一个事务持有相同表上相同记录的锁(行锁),或者元数据锁:metadata lock,以及LOCK INSTANCE FOR BACKUP语句获取的锁信息。元数据锁指数据库对象的数据字典信息,包括并不限于表结构信息、procedure、function定义信息、视图定义,以及LOCK TABLES,FLUSH TABLES WITH READ LOCK, andHANDLER等语句获取的锁。同时另外一个事务并发的获取相同...

2020-09-11 10:58:37 59

原创 mysql in语句产生的奇怪的bug

mysql in语句产生一个奇怪的bug,在将performance_schema.events_statements_history_long和performance_schema.threads c通过thread_id列使用in连接时,出不来结果,但是用exists可以出来。mysql> (select c.thread_id from information_schema.innodb_lock_waits w,information_schema.innodb_trx b,perfo..

2020-09-10 17:03:48 95

原创 mysql 会话临时表空间、全局临时表空间、临时表、内存临时表、磁盘临时表及其监控,

mysql在一些情况下会使用临时表,这些情况包括使用union 、global order by 、子查询、distinct、INSERT ... SELECT、multiple-tableUPDATE、GROUP_CONCAT()orCOUNT(DISTINCT)、窗口函数window functions等,这些条件下,如果用于临时表的内存足够,所有数据都在内存中完成运算,则称为 in-memory temporarytable,如果内存不足,则数据最终会溢出到磁盘,最终生成磁盘临时表,称为...

2020-07-28 11:37:24 200

原创 mysql cpu飙高的处理案例1

mysql是一个多线程的架构,所以从linux主机上观察到的mysqld进程的cpu飙高,通常都是由其下的某个或者某几个线程消耗大量cpu资源。这种情况下,第一步要先确定具体是哪个线程消耗cpu。linux上,最简单的就是用top命令的-H选项:-H :Threads-mode operation Instructs top to display individual threads. Without this command-line option a summation ...

2020-07-10 00:42:06 390

原创 [ERROR] InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint

这个问题出现在mysql 5.7之后的版本,主要的原因是mysql会在最新的checkpoint完成后都会在redo log写一个一字节的MLOG_CHECKPOINT 标记,用来标记在此之前的redo都已checkpoint完成。如果处于任何原因没有找到这个标记,那么整个redo日志文件都会被忽略。出现这个错误的话,最好是有备份进行恢复,如果没有做好备份,那按照下面的方法处理可能会有数据丢失。第一步:设置如下参数,并移除当前使用的redo日志文件:innodb_log_checksums = ON

2020-06-30 17:30:45 621

转载 O_DIRECT对齐

这是我对quora上的一篇回答的理解。O_DIRECT用于直接将内存中的数据写入存储,而不经过操作系统文件缓存。通常的文件写操作需要经过“用户空间->内核空间->存储”,而O_DIRECT绕过了内核空间,路径为“用户空间->存储”。由此而来的问题是,内核处理的所有事情都需要用户自己来处理,其中最重要的是内存对齐--这件小事通常是内核来处理的。而对齐的大小,则是根据存储的sector size扇区大小(在linux 2.6 kernel以前对齐大小是文件系统的逻辑块大小),因为secto

2020-06-17 21:33:00 194

转载 内存对齐

本篇文章讲解内存地址对齐。个人的理解就是cpu访问内存的粒度,以及cpu始终按照粒度的整数倍寻址访问内存的行为。本片文章转载自:https://developer.ibm.com/articles/pa-dalign/?mhsrc=ibmsearch_a&mhq=pa-dalignData alignment: Straighten up and fly rightAlign your data for speed and correctnessBy Jonathan Rentzsc

2020-06-16 22:30:53 141

原创 我理解的MYISAM引擎之八 终章,myisam的优化

终于来到了这个系列的终章,到这里整个myisam引擎就介绍的七七八八了。感慨一下,下面继续。首先从系统变量层面:myisam最重要的配置就是 key_buffer_size,配置myisam表索引使用的共享内存大小,如果你的数据库较多使用了myisam引擎表,那就需要增大这个配置。这块区域类似innodb的innodb_buffer_pool,数据库对于myisam表的索引数据是共享访问的,所有的索引key都需要先通过物理读读入这个区域,然后再由各个线程来进行读写操作。如果设置的过小,...

2020-06-07 15:27:32 97

原创 我理解的MYISAM引擎之七 check、analyze、optimize、repair 与myisamchk

语句 参数 作用 引擎 备注 CHECK TABLE FOR UPGRADE 检查升级后的不兼容项 MYISAM,INNODB,VIEW a)选项可以叠加使用,从上往下,校验的内容逐渐增多; b)check table会自动flush table; c) check table如果在innodb上发现了非2级索引的块损坏,会导致mysqld进程崩溃https://bugs.mysql.com/bug.php?id=10132 ...

2020-06-01 16:21:00 78

原创 ERROR 1031 HY000 Table storage engine for xxx does not have this option

这个问题通常是在表上做了一些表当前的存储引擎不支持的操作,或者当前表将要转换为目标存储引擎,但是有一些当前表特定的创建选项目标存储引擎不支持引起的。类似的问题都可以按照这个思路来解决。我这里遇到的问题是将一个myisam表转为innodb引擎引起的。mysql> show create table t_innodb_12;+-------------+-------------------------------------------------------------------------

2020-05-28 09:16:30 543

原创 我理解的myisam引擎之六 MYI、MYD文件的解析

文件内容解析以下面的表结构和内容举例。mysql> create table t_isam_10 (id int ,id1 int ,c1 varchar(10) )engine=myisam;Query OK, 0 rows affected (0.11 sec)mysql> alter table t_isam_10 add index idx_id(id) key_block_size=2048;Query OK, 0 rows affected (0.14 sec)Reco

2020-05-24 21:56:46 389

转载 centos 6/7/8 配置国内安装源

对应源的具体安装操作可以从后面的帮助文档中获取,里面讲的非常简单有操作性。本人操作验证了是可以的。原文链接:https://my.oschina.net/u/1011130/blog/3191990名称 镜像下载地址 帮助文档地址 清华大学 https://mirrors.tuna.tsinghua.edu.cn/centos/ https://mirrors.tuna.tsinghua.edu.cn/help/centos/ 中国科学技术大学 http.

2020-05-18 09:02:51 485

原创 [InnoDB] [FATAL] Tablespace id is xx in the data dictionary but in file .\test\t3.ibd it is xx!

这个错误字面意思看就是库名表名一致,但是表空间id已经不同了。通常innodb_file_per_table启用,当innodb表发生重建的时候,例如truncate、optimize table、repair table等会导致表重建的操作,表空间id就会发生改变。表空间id记录在两个地方,一个在系统表空间中的字典表,一个记录在表对应的ibd文件里。这个时候,不管出于何种原因,ibd文件使用了旧文件,就会报这个错误。并且导致mysqld进程崩溃退出。此时需要使用innodb_force_recovery=

2020-05-15 23:53:28 825

原创 elasticsearch的分片路由与mysql ndb cluster的主键路由

突然想到一个有意思的事情,elasticsearch目前已经广为使用,其基于分片的的多节点集群提供了良好的容灾与极高的读写性能,得到了诸多大厂的青睐。那么,同样是基于主键hash路由的mysql ndb cluster,同样拥有较高的性能和可容灾性,为什么ndb没有得到广泛使用,反而大厂都劳心劳力去开发各种分库分表中间件呢?我想这其中主要的点在于两者使用方式的不同,elasticsearch没有支持多索引 join查询吧?即使是变种的parent-chiled记录,也是要基于parent_id将父子

2020-05-12 01:11:23 60

原创 elasticsearch集群节点重启导致分片丢失的问题

记录一下es丢失分片的问题。5.4.3版本的es。3个节点分布在三台主机上,分片设置为5分片1副本的配置。因为压力测试,需要升级节点java堆内存,从2G升级到6G。因为是测试集群,在改了jvm.options配置之后(要改es软件目录下的才生效,配置目录下的不生效),挨个重启节点,每个节点相差几秒钟的样子。好了,在我一顿操作猛如虎之后,集群起来了,皆大欢喜,继续测试。过了10来天,开发找过来...

2020-04-30 01:34:52 1882

原创 我理解的myisam引擎之五 MyISAM key cache实现细节

key cache block的访问:1,可以以共享读的方式访问;2,一个block同时只能由一个session进行update;3,如果需要从磁盘读入一个新的block,而导致要替换cache中的一个block,那么如果被替换的block是脏的,需要先flush。另外,key_buffer_size设置不能太小,至少要能装下8个block。否则不使用buffer,仍然使用文件系统...

2020-04-27 14:30:39 90

原创 ElasticSearch批量导入的优化实践

最近在做es跨集群批量导入的优化工作,将自己get到的点总结一下。跨集群导入有三种方法:1,应用编程,从源集群读取,导入目标集群;这种方法的优点在于,整个导入过程的各个环节是自己编码控制的,每个环节都能做到可控,哪里有问题就可以针对性修改代码进行调优。正所谓哪里有问题点哪里。并且导出和导入是同时进行的,可以将导入程序部署在第三台机器上,充分利用各节点机器资源。但同时优点也是缺点,就是各个环...

2020-04-26 17:28:29 461

原创 我理解的myisam引擎之四 myisam-block-size、key_cache_block_size、key_block_size

先简单说下myisam-block-size、key_cache_block_size、key_block_size这几个参数的含义和区别,如下是摘抄自我的另一篇文章我理解的myisam引擎之一 myisam表特征myisam-block-size:看到这里的中划线了吗?对,这是一个启动选项,只能在启动时设置并且不能动态修改,或者设置在配置文件中,或者在启动命令行上。围绕这个参数应该是一个系统变...

2020-04-26 16:06:39 192

原创 mysql innodb/myisam 引擎可传输表空间导入,mysql innodb transportable tablespace import

基于mysql8.0.19版本验证。mysql innodb引擎可传输表空间导入可以将整个innodb表整个表数据文件从一个database导入到另一个database,或者从一个server导入到另一个server。在大数据量导出导入时,十分方便。但是方便的同时,也有诸多限制,话又说回来,只要满足了这些限制条件,还是很方便的。先看例子:1,导入innodb普通表mysql> cre...

2020-04-24 17:32:59 281

原创 我理解的myisam引擎之三 myisam表常见问题 以及open、close、table_open_cache、max_connections、文件描述符

myisam表通常遇到最多的问题,一个是表MYI或者MYD文件损坏,另一个是表未正常close。文件损坏通常是由于myisam文件正在使用中的同时,mysql进程异常退出,或者机器宕机,或者磁盘坏掉,或者在mysqld运行的时候使用了myisamchk等外部工具(mysqld运行时使用check,mysqld停止时使用myisamchk没有问题),或者mysql本身的bug。以上这些原因都会造...

2020-04-22 00:39:33 125

原创 javax.security.auth.PrivateCredentialPermission" "org.apache.hadoop.security.Credentials" "read"

es5.4.3集群配置hdfs备份插件时出现权限错误:com.google.protobuf.ServiceException: java.security.AccessControlException: access denied ("javax.security.auth.PrivateCredentialPermission" "org.apache.hadoop.security.Cr...

2020-04-20 14:18:16 65

原创 elasticsearch restore并发分片数的控制

按照文档中的描述,es的snapshot/restore操作是在snapshot线程池控制的。这个线程池控制并发snapshot或者restore的线程的数量。一个shard需要绑定一个thread来进行操作。此线程池大小受3个因素影响:1,机器可用processor数量,也既cpu核数。这个默认是读取机器配置。但是可以通过参数进行配置。2,thread_pool.snapshot.max...

2020-04-20 11:48:26 103

原创 我理解的myisam引擎之二 MyISAM表(MYD)存储格式

MyISAM存储格式,也称行格式(存储的就是数据表行数据)。众所周知,MyISAM有三种类型的row_format行格式。fixed固定的行格式、dynamic动态行格式、compressed压缩行格式。以下来逐一说明。fixed固定行格式:当存储殷勤为myisam时,如果表不包括可变长度列(VARCHAR,VARBINARY,BLOB, orTEXT),或者即使包括(VARCHAR,...

2020-04-20 02:56:28 185

原创 我理解的myisam引擎之一 myisam表特征

MySQL的MyISAM引擎是基于旧有的isam引擎,并在其上添加了一些有用的扩展形成的。MyISM引擎有以下特征:这里来逐个分析这个YES or NO背后的逻辑。首先,MyISAM表存在两个文件(最新的8.0版本多一个sdi文件)MYI存放索引数据、MYD存放表数据。并且MYI使用的是B-tree结构,因此就支持了B-tree索引。接着备份和时间点恢复,这个是由mysql server提供的...

2020-04-08 02:05:18 356

删除卸载单个perl模块脚本

干净的删除卸载单个perl模块,remove or uninstall perl module。

2018-11-28

AndroidPlayerLibrary-master

亲测可用的android基于vlc开发的在线和本地音视频播放库。大家有分的就权当施舍,没分的可到这个地址下载 http://www.open-open.com/lib/view/home/1431650058560

2015-09-02

mysql-monitor.zip

简单实现python脚本检测mysql数据插入响应时间。。。。。。

2019-09-18

空空如也

空空如也

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

TA关注的人 TA的粉丝

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