Welcome 微信登录

首页 / 数据库 / MySQL

MySQL · 特性分析 · InnoDB transaction history

MySQL · 特性分析 · InnoDB transaction history

背景在写压力负载比较重的MySQL实例上,InnoDB可能积累了较长的没有被purge掉的transaction history,导致实例性能的衰减,或者空闲空间被耗尽,下面就来看看它是怎么产生的,或者有没有什么方法来减轻,避免这样的问题出现。InnoDB purge 概要InnoDB是一个事务引擎,实现了MVCC特性,也就是在存储引擎里对行数据保存了多个版本。在对行数据进行delete或者update更改时,行数据的前映像会保留一段时间,直到可以被删除的...
MySQL · 引擎特性 · InnoDB 文件系统之IO系统和内存管理

MySQL · 引擎特性 · InnoDB 文件系统之IO系统和内存管理

综述在这篇我们介绍了InnoDB文件系统的物理结构,本篇我们继续介绍InnoDB文件系统的IO接口和内存管理。为了管理磁盘文件的读写操作,InnoDB设计了一套文件IO操作接口,提供了同步IO和异步IO两种文件读写方式。针对异步IO,支持两种方式:一种是Native AIO,这需要你在编译阶段加上LibAio的Dev包,另外一种是simulated aio模式,InnoDB早期实现了一套系统来模拟异步IO,但现在Native Aio已经很成熟了,并且Sim...
MySQL · 引擎特性 · InnoDB 文件系统之文件物理结构

MySQL · 引擎特性 · InnoDB 文件系统之文件物理结构

综述从上层的角度来看,InnoDB层的文件,除了redo日志外,基本上具有相当统一的结构,都是固定block大小,普遍使用的btree结构来管理数据。只是针对不同的block的应用场景会分配不同的页类型。通常默认情况下,每个block的大小为 UNIV_PAGE_SIZE,在不做任何配置时值为16kb,你还可以选择在安装实例时指定一个块的block大小。对于压缩表,可以在建表时指定block size,但在内存中表现的解压页依旧为统一的页大小。从物理文件的...
MySQL · 性能优化· 5.7.6 InnoDB page flush 优化

MySQL · 性能优化· 5.7.6 InnoDB page flush 优化

在这篇文中,我们已经详细介绍了Oracle MySQL以及社区分支最新的对InnoDB page flush的优化。在最近release的5.7.6版本中又有了进一步的改进。主要包括以下几点修改修改一、更精确的loop时间Page cleaner每做srv_flushing_avg_loops次flush后,会去计算刷脏和Redo LSN增长的速度。由于每次Page cleaner的工作量是自适应的,一次flush操作的时间可能超过1秒。在新版本中,统一采...
MySQL · 性能优化· InnoDB buffer pool flush策略漫谈

MySQL · 性能优化· InnoDB buffer pool flush策略漫谈

背景我们知道InnoDB使用buffer pool来缓存从磁盘读取到内存的数据页。buffer pool通常由数个内存块加上一组控制结构体对象组成。内存块的个数取决于buffer pool instance的个数,不过在5.7版本中开始默认以128M(可配置)的chunk单位分配内存块,这样做的目的是为了支持buffer pool的在线动态调整大小。Buffer pool的每个内存块通过mmap的方式分配内存,因此你会发现,在实例启动时虚存很高,而物理内存...
MySQL · 引擎特性 · InnoDB redo log漫游

MySQL · 引擎特性 · InnoDB redo log漫游

前言InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以及InnoDB的MVCC,后者用来保证事务的持久性。和大多数关系型数据库一样,InnoDB记录了对数据文件的物理更改,并保证总是日志先行,也就是所谓的WAL,即在持久化数据文件前,保证之前的redo日志已经写到磁盘。LSN(log sequence number) 用于记录日志序号,它是一个不断递增的 unsigned long long ...
MySQL · 引擎特性 · InnoDB undo log 漫游

MySQL · 引擎特性 · InnoDB undo log 漫游

本文是对整个Undo生命周期过程的阐述,代码分析基于当前最新的MySQL5.7版本。本文也可以作为了解整个Undo模块的代码导读。由于涉及到的模块众多,因此部分细节并未深入。前言Undo log是InnoDB MVCC事务特性的重要组成部分。当我们对记录做了变更操作时就会产生undo记录,Undo记录默认被记录到系统表空间(ibdata)中,但从5.6开始,也可以使用独立的Undo 表空间。Undo记录中存储的是老版本数据,当一个旧的事务需要读取数据时,为...
MySQL· 性能优化·5.7 Innodb事务系统

MySQL· 性能优化·5.7 Innodb事务系统

背景知识为了便于理解下文,我们先简单梳理下Innodb中的事务、视图、多版本的相关背景知识。在Innodb中,每次开启一个事务时,都会为该session分配一个事务对象。而为了对全局所有的事务进行控制和协调,有一个全局对象trx_sys,对trx_sys相关成员的操作需要trx_sys->mutex锁。Innodb使用一种称做ReadView(视图)的对象来判断事务的可见性(也就是ACID中的隔离性)。根据可见性原则,某个新开启的事务不应该看到其他未...
MySQL 5.6.23 InnoDB相关Bugfix

MySQL 5.6.23 InnoDB相关Bugfix

本节摘取了MySQL5.6.23的几个和InnoDB相关的主要bugfix,简单阐述下问题及解决方案。问题一当执行FLUSH TABLE..FOR EXPORT命令时,会暂停purge线程的操作。这一步通过设置一个标记purge_sys->state的值为PURGE_STATE_STOP来告诉purge线程该停下来歇歇了。然而如果Purge线程当前正在函数srv_do_purge中工作,该函数会执行一个while循环,退出条件是当前server sh...
MySQL · 答疑解惑 · mysqldump tips 两则

MySQL · 答疑解惑 · mysqldump tips 两则

背景用户在使用mysqldump导数据上云的时候碰到两个“诡异”的问题,简单分析分享下。TIP 1 --port端口无效?本地有3306和3307两个端口的实例,执行命令为:mysqldump --host=localhost --port=300x -Ddb1 db1 -r outputfile发现无论执行端口写入3306还是3307,导出的都是3306端口实例的数据。代码分析实际上不论是mysqldump还是mysql客户端,在...
MySQL Internal - InnoDB存储引擎(行结构)

MySQL Internal - InnoDB存储引擎(行结构)

InnoDB行存储的三个组成部分(说明: F字符表示列的数量)名称(Name)大小(Size)Field Start Offsets(F*1) or (F*2) bytesExtra Bytes6 bytesField Contents取决于内容1: FIELD START OFFSETS指在实际数据存储行中每一字段(entry,实际存储不只是包括列,还有额外信息)的位置偏移量信息列表,这个位置由原点(Origin)相对位置和下一个字段计算而来。该列表保存...
MySQL 字符串截取相关函数

MySQL 字符串截取相关函数

在工作中,可能需要将某些字段按某个分割符组成一个字符串作为字段值存取到数据库表中,比如某个任务对应三个结果,分别存储在不同的数据表中,这时可以将这三个不同表的主键按照约定的顺序进行组合(主键a:主键b:主键c)。当需要分别去查任务对应类别的详情信息时,可以截取特定位置的字符串(主键b) join 表b进行操作。正好最近也遇到这块操作,特意将 MySQL 字符串截取的相关函数做一个梳理,以便今后回顾。一、left(str, len)返回字符串str自左数的l...
CentOS 7.0 使用 yum 安装 MariaDB 与 MariaDB 的简单配置

CentOS 7.0 使用 yum 安装 MariaDB 与 MariaDB 的简单配置

闲置已久的空间环境配置忘得差不多了,今天得空整理,重置了磁盘重新搭建环境,首先在CentOS 7.0安装MariaDB的数据库,在这里记录下安装过程,以便以后查看。1、安装MariaDB安装命令yum -y install mariadb mariadb-server安装完成MariaDB,首先启动MariaDBsystemctl start mariadb设置开机启动systemctl enable mariadb接下来进行MariaDB的相关简单配置m...
DataGuard备库的数据文件的迁移实战

DataGuard备库的数据文件的迁移实战

在前几天也花了一点时间测试了一下关于备库数据文件的迁移,这部分的工作看起来还是比较常规的,当然方法也很多。但是在实际工作中就更不能掉以轻心,所有的操作都要有理有据。都要经过一些严格的测试,如果测试不当,很可能在后期就会出现一些看似奇怪的问题,造成一些不必要的麻烦和影响。所以在开始之前,做了下面的准备工作。1.在zabbix中设定了维护窗口,这样在维护操作中就不会报警。2.检查目前的备库参数设置,是否开启了闪回区,目前的文件路径设置情况和归档情况3.检查目标...
Oracle增量数据丢失的原因分析

Oracle增量数据丢失的原因分析

今天开发的同事找到我,让我帮他们补一部分数据,因为有一个表的数据已经快一个月没有增量数据了,这个需求听起来有些奇怪是不?问题的背景是在统计库中存在一个表,供部分应用做统计分析,每天会根据时间生成一条记录,这条记录汇总的数据会作为统计分析所用。但是每天的这一条增量数据的源头来自于另外两个在线交易库。两个库中的数据会做一些关联,大体的实现思路就是下面的形式。现在OLAP的库中的表里的部分增量数据没有按照时间增加,所以对前端应用的统计造成了一定的影响。当然对于D...
Oracle 11g中的char类型使用

Oracle 11g中的char类型使用

在Oracle数据表和程序类型中,字符类型可能是使用最多的一种了。从历史上看,Oracle首先推出了固定长度char类型字段,之后才推出了变长度类型varchar2。目前,主流Oracle应用开发都已经普遍接受了varchar2作为数据表字段类型表示。如果存在超长字符,都考虑使用CLOB这类大对象进行存储。但是,我们在实际领域中,还是会在各种遗留系统中发现很多char类型字段。而且连带这些遗留系统的下游系统中,char类型也会经常出现。在这样的背景下,开发...
使用DataPump的Sample参数来进行数据抽样

使用DataPump的Sample参数来进行数据抽样

数据泵Datapump是Oracle推出的一项非常方便的数据逻辑备份还原工具。同传统的Exp/Imp相比,Datapump无论在性能、功能上都提供了很多优势进步。在实际工作中,大数据抽样是一个经常出现的业务需求。对一个海量数据表,也许抽取有代表性的数据量就可以完成相应工作。在select语句中,我们的确可以使用sample语句去实现对应的一些功能。借助Datapump,我们也可以实现采样方式的数据表备份处理。1、环境说明我们选择Oracle 11gR2进行...
Alter Log中VKTM时间drift漂移现象

Alter Log中VKTM时间drift漂移现象

时间是包括数据库系统在内的诸多信息系统基础件的重要因素。对于运行在操作系统OS之上的中间件组件而言,获取到一个准确、连续和一致的时间非常重要,特别是多节点的环境下。如果没有一个统一的时间管理机制,其上的cluster组件工作是及其困难的。本篇主要介绍Oracle vktm时间后台进程报警的Bug问题。1、从11g VKTM进程谈起对Oracle数据库,避免对于操作系统层面时间的调用,维持一个统一稳定的时间体系一直是发展方向。在11g中,一个独立的后台进程v...
从一个案例看PL/SQL代码片的编译与运行

从一个案例看PL/SQL代码片的编译与运行

PL/SQL语言是Oracle针对数据库业务逻辑需求开发的一种面向过程的结构化编程语句。在Oracle内核中,存在PL/SLQ引擎和SQL引擎两个重要组成部分,分别用于处理结构化的PL/SQL语句和SQL语句。同所有高级语言一样,PL/SQL语句同样存在编译和运行两个关键步骤。在Compile环节,主要实现语法权限检查、对象方法检查和语法结构检查。在运行Runtime阶段,相同的过程其实还是会进行,一些语句错误都是在运行时发生检测。本篇主要通过一个错误案例...
为Linux版本Oracle 11gR2配置HugePage

为Linux版本Oracle 11gR2配置HugePage

HugePage是Oracle在Linux版本下一种性能优化手段。对于共享内存区域(SGA)的数据库系统,Oracle通常都推荐在操作系统层面配置上HugePage,为Oracle实例准备更大的可用共享内存和整块的内存。本文主要介绍在Oracle 11gR2版本上,进行HugePage配置全过程。记录下来,共需要的朋友待查。使用HugePages优化内存性能 http://www.linuxidc.com/Linux/2015-03/114587.htmP...
<< 911 912 913 914 915 916 917 918 919 920 >>