自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 oracle数据库所在主机内存耗尽

大体上就是不断的告警,主机内存基本使用完了,swap使用90%。这个时候就开始着手处理。详细经过就不写了,这里只写一些事后总结。总结一下,1,要精确厘清到底哪些进程使用的内存是合理的,哪些是不合理的,合理的进程使用的内存大点也没关系,不合理的才是出问题的关键。top -d 1 可以看一个整体,里面有几个指标,RSS、SHR、VIRT;其中RSS表示进程驻留在物理内存中的内存大小,但并不是指进程的私有内存空间,也可以是共享内存。%MEM指标就是使用"RSS/物理内存" 计算出来的。我一开始使用%M

2021-10-06 04:14:04 715

转载 剖析top命令显示的VIRT RES SHR值

http://yalung929.blog.163.com/blog/static/203898225201212981731971/http://www.fuzhijie.me/?p=741引 言: top命令作为Linux下最常用的性能分析工具之一,可以监控、收集进程的CPU、IO、内存使用情况。比如我们可以通过top命令获得一个进程使用了多少虚拟内存(VIRT)、物理内存(RES)、共享内存(SHR)。  最近遇到一个咨询问题,某产品做性能分析需要获取进程占用物理内存的实际大小(不包括和其他进程

2021-07-13 16:23:50 3715 1

原创 MySQL relay_log_recovery源码分析

此处所列代码为mysql8.0.23版本,其它版本可能略有差异。relay_log_recovery按照官方文档描述,在server启动的时候,会创建新的relay_log,并将sql_thread指向新的relay_log坐标,并且引导io_thread将从master读取的event写入新的relay log中。从而跳过旧的relay log的apply,进而避免旧的relay log出现问题导致复制出现问题。但是在MTS下,在出现复制gap的时候,仍然需要在旧的relay log上将gap补齐

2021-03-25 01:52:16 1089

原创 使用MTS加快mysql奔溃后binlog恢复

场景是这样的:有一个mysql库,5.7.29版本的,被任务操作误删除了,需要恢复。但是日常的备份操作因为没有安装xtrabackup热备工具,导致日常的全备曾备没有正常进行,好在binlog基本都有备份(缺了中间一个binlog文件,这个在后面细说)。也就是说,我们只能通过重放binlog进行恢复。WTF!全部的binlog是108个文件,每个512M大小。需要尽可能快的恢复。对于上面的场景,个人认为有以下几种方案:1,使用mysqlbinlog结合mysql进行重放。具体是将binlog文件列表列

2021-03-16 23:27:26 405

原创 MySQL:Waiting for dependent transaction to commit

这是一个stage,定义在mysqld.cc文件的11321行。mysql在sql/rpl_mts_submode.cc文件的wait_for_last_committed_trx方法中进入此stage。#rpl_mts_submode.ccbool Mts_submode_logical_clock::wait_for_last_committed_trx( Relay_log_info *rli, longlong last_committed_arg) { THD *thd =

2021-03-09 23:32:29 2438

原创 MySQL MTS多线程复制模型源码解析

本文基于mysql8.0.23版本代码。其他版本代码可能有稍许不同。这里主要阐述基于logical_lock方式的并行,基于DB的并行实际中用的不多,就略过了。MySQL MTS(multi threads slave)多线程复制主要是基于三种类型的线程:1,slave io线程,单线程。用以连接到master,并从master dump出binlog文件内容,并写入到slave的relay log文件中。2,slave coordinator,应用协调器线程,单线程。用于从slave的rela

2021-03-09 01:11:11 461 2

原创 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 880

原创 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 856

原创 [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 745 1

原创 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 279 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 994

原创 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 1208 3

原创 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 18004

原创 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 709

原创 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 474

原创 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 1348

原创 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 337

原创 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 1244

原创 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 3593 1

原创 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 771 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 2455

转载 补码原理

声明,以下内容为转载,原文地址: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 1567

原创 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 1371

原创 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 324

原创 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 1368

原创 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 1227

原创 [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 7509

转载 O_DIRECT对齐

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

2020-06-17 21:33:00 1351

转载 内存对齐

本篇文章讲解内存地址对齐。个人的理解就是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 499

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

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

2020-06-07 15:27:32 279

原创 我理解的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 315

原创 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 3830

原创 我理解的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 1866

转载 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 864

原创 [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 4025

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

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

2020-05-12 01:11:23 138

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

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

2020-04-30 01:34:52 8527 2

原创 我理解的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 302

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

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

2020-04-26 17:28:29 1456

原创 我理解的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 842

mysql-monitor.zip

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

2019-09-18

删除卸载单个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

空空如也

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

TA关注的人

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