MySql高级
21蓝冰
清华大学
展开
-
MySQL集群的可行方案
如果单MySQL的优化始终还是顶不住压力时,这个时候我们就必须考虑MySQL的高可用架构(很多同学也爱说成是MySQL集群)了,目前可行的方案有:一、MySQL Cluster优势:可用性非常高,性能非常好。每份数据至少可在不同主机存一份拷贝,且冗余数据拷贝实时同步。但它的维护非常复杂,存在部分Bug,目前还不适合比较核心的线上系统,所以这个我不推荐。二、DRBD磁盘网络镜像方转载 2013-02-18 18:24:21 · 367 阅读 · 0 评论 -
mysql内核分析--innodb动态数组内部实现(下)
2)used used表示data[DYN_ARRAY_DATA_SIZE]字段中已经使用的字节的数量,假设需要申请len字节的长度,在使用之前需要判断的是,尾 block中的可用空间是否够用。也就是判断判断下used+len是否满足used+len 如果,该block空间不够,那么就会申请一个新的block,这里我们就可以明白了,为什么需要满足len的长度小于等于DYN_AR转载 2012-03-20 18:25:07 · 351 阅读 · 0 评论 -
mysql内核分析--innodb动态数组内部实现(上)
1. 动态数组概述动态数组涉及的文件是innodb存储引擎的三个文件:dyn0dyn.h、dyn0dyn.ic以及dyn0dyn.c。 这是一个基本的组件功能,是作为一个动态的虚拟线性数组。数组的基本元素是byte。动态数组dyn主要用来存放mtr的锁定信息以及log。Dyn在实现上,如果block需要分裂节点,则会使用一个内存堆。每个blok块存储数据的数据字段的长度是固转载 2012-03-20 18:24:55 · 487 阅读 · 0 评论 -
如何编译mysql内核
在最新的版本中,windows环境与linux环境下使用一套代码。比如mysql-6.0.4-alpha版本中的INSTALL-WIN-SOURCE文件的描述: To build MySQL on Windows from source, you must satisfy the following system, compiler, and resource requireme转载 2012-03-20 18:24:42 · 351 阅读 · 0 评论 -
Mysql查询优化器浅析(下)
7 存取类型 当我们评估一个条件表达式,MySQL判断该表达式的存取类型。下面是一些存取类型,按照从最优到最差的顺序进行排列:system … 系统表,并且是常量表const … 常量表eq_ref … unique/primary索引,并且使用的是'='进行存取ref … 索引使用'='进行存取r转载 2012-03-20 18:24:25 · 266 阅读 · 0 评论 -
InnoDB记录结构浅析
InnoDB记录由三个部分组成,见表1:表1:InnoDB的记录组织形式名称长度Field Start OffsetsF*1或者 (F*2)个字节Extra Bytes6个字节Field Contents和记录的实际内容相关备注:1转载 2012-03-20 18:23:51 · 360 阅读 · 0 评论 -
思考mysql内核之初级系列12---innodb的簇描述结构
在上一篇里,bingxi和alex聊了关于innodb的页编号。在本篇,bingxi和alex会讨论下簇描述结构。所谓的簇描述结构,对应的英文描述是extent,表达的意思是一些连续的页。对应的文件为:D:/mysql-5.1.7-beta/storage/innobase/fsp/ fsp0fsp.cD:/mysql-5.1.7-beta/storage/innobase/inclu转载 2012-03-20 18:27:33 · 429 阅读 · 0 评论 -
思考mysql内核之初级系列11---innodb的页编号
在上一篇里,bingxi和alex聊了关于mysql内核调试方法。前10篇是一些基础性的内容,从本篇开始,将开始描述inndob的存储结构,为了便于描述的方便,会将一些细节暂时隐去,在后续说到B时会串起来。 我们可以了解到oracle、sqlserver采用的是段、簇、页的方式进行管理。很多其他的数据库也是采用的这样的方法。本篇,bingxi和alex讨论的是页的编号。对应的文件为:转载 2012-03-20 18:27:26 · 364 阅读 · 0 评论 -
思考mysql内核之初级系列8---innodb的list算法
在上一篇里,bingxi和alex聊了下关于hash表的内容。在本篇里,会聊下关于list的内容。所谓list,就是双向链表,这样的算法在《数据结构》里面都是常见的。为了屏蔽差异性,类似于hash表,mysql将list通过宏来实现。 对应的文件为:D:/mysql-5.1.7-beta/storage/innobase/include/ut0lst.h 1)常用结构体转载 2012-03-20 18:26:54 · 329 阅读 · 0 评论 -
思考mysql内核之初级系列7---innodb的hash表实现
在上一篇里面,bingxi和alex谈到了文件系统管理,在结构体里面出现了两个常用的结构:hash_table_t、UT_LIST_NODE_T。这两个结构比较常用,在本篇里面,bingxi和alex聊了下关于hash_table_t的内容。对应的文件为:D:/mysql-5.1.7-beta/storage/innobase/ha/hash0hash.cD:/mysql-5.1.7-转载 2012-03-20 18:26:45 · 314 阅读 · 0 评论 -
思考mysql内核之初级系列1--- mysql的启动过程
有一天,两个不懂mysql内核的人想去了解mysql内核代码,两个人不是去调试代码、查找资料,而是在那边思考。因为不了解内核,所以边思考边去验证。 使用的mysql代码是5.1.7,调试环境是windows平台下的vs2003。 Bingxi:“alex,你觉得mysql的启动过程会是什么样的呢?我们以银行为例吧。” Alex:“嗯,bingxi。早上银行开门了,会先准备转载 2012-03-20 18:25:37 · 375 阅读 · 0 评论 -
思考mysql内核之初级系列2---我可以为你服务什么?
Alex取了个号,客户经理小张负责办理alex的服务。 1)服务清单 小张:“先生,我可以为你服务什么么?” Alex:“厄,我要一碗红烧肉。” 小张:“没有” Alex:“厄,那来碗拉面” 小张:“没有” Alex:“那有些啥?” 小张:“可以查看sql目录下sql_yacc.yy文件,不过你用的这个5.1.7没有该文件,只有相对应的sql_ya转载 2012-03-20 18:25:49 · 301 阅读 · 0 评论 -
思考mysql内核之初级系列3---办理业务的流程
Alex第二天带了身份到银行找了小张,要办理个开户业务。 1)语法结构Lex Alex:“小张,我要开个账户。” 小张:“麻烦填写个开户申请单。” Alex:“好的,我顺便问个问题,开户要填写开户申请单,兑换港币也要写申请单,汇款等也需要填写,这里面既有共性,又有差异性,是如何管理的。” 小张:“嗯,差不多,都是提供写一些表单填写,假设申请创建表,那么就会用到cre转载 2012-03-20 18:25:59 · 608 阅读 · 0 评论 -
MySQL Innodb日志机制深入分析
2011-06-25 21:45 2255人阅读评论(0)收藏 举报 目录(?)[+] MySQL Innodb日志机制深入分析 1.1. Log & CheckpointInnodb的事务日志是指Redo log,简称Log,保存在日志文件ib_logfile*里面。Innodb还有另外一个日志Un转载 2013-01-07 11:25:21 · 373 阅读 · 0 评论 -
mysql分表的3种方法
一,先说一下为什么要分表当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。根据个人经验,mysql执行一个sql的过程如下:1,接收到sql;2,把sql放到排队队列中 ;3,执行sql;4,返回执行结果。在这个执行过程中最花时间在什么地方呢?第一转载 2012-12-13 15:46:47 · 730 阅读 · 0 评论 -
Linux Bash实现自动MySQL远程备份
基本思路是利用mysqldump导出到sql文件,然后利用rar加密压缩利用FTP上传到远程FTP空间。Linux 下的Rar请到http://www.rarlab.com/ 下载。我的环境是CentOS#!/bin/bashFILENAME=$(date +%Y%m%d)echo time: $FILENAME#exitecho exporting/usr/local/mysql/bin转载 2012-10-31 20:20:03 · 2062 阅读 · 0 评论 -
有关MySQL奇技淫巧巧
有关MySQL奇技淫巧(一般都是Linux下试过的,其它平台自行尝试)0、学会查看MySQL错误日志日志名一般为HOST_NAME.err,在里面说不定很容易找到你想要的东西1、开启MySQL General Query Log想查看MySQL执行了哪些SQL语句?那么就开启这个日志吧http://dev.mysql.com/doc/refman/5.1/en/转载 2012-03-22 15:23:18 · 657 阅读 · 0 评论 -
思考mysql内核之初级系列13---innodb的簇页管理
在上一篇,bingxi和alex聊了关于簇描述结构。在本篇,bingxi和alex会讨论下簇页管理。所谓的簇页,就是用于管理簇结构的页。对应的文件为:D:/mysql-5.1.7-beta/storage/innobase/fsp/ fsp0fsp.cD:/mysql-5.1.7-beta/storage/innobase/include/ fsp0fsp.h 1)每个页转载 2012-03-20 18:27:41 · 368 阅读 · 0 评论 -
思考mysql内核之初级系列10---mysql内核调试方法
在前面三篇,bingxi和alex聊了关于innodb的hash、list、以及动态数组的实现方法,这三个结构比较常用。讲完前9篇内容,本篇会描述在windows环境下debug mysql的方法,强烈建议通过debug的方式进行学习。在本篇里,bingxi和alex会聊到windows下常用的调试mysql代码的方法,仅供参考。 1)在windows和linux下调试的异同? B转载 2012-03-20 18:27:16 · 439 阅读 · 0 评论 -
思考mysql内核之初级系列9---innodb动态数组的实现
在上一篇,bingxi和alex聊了关于list的内容。在本篇里,bingxi和alex会聊到innodb的动态数组,也称为dyn。 对应的文件为:D:/mysql-5.1.7-beta/storage/innobase/include/dyn0dyn.hD:/mysql-5.1.7-beta/storage/innobase/include/dyn0dyn.icD:/mysql转载 2012-03-20 18:27:04 · 442 阅读 · 0 评论 -
思考mysql内核之初级系列6---innodb文件管理
在上一篇里面,bingxi和alex思考了information_schema,这个一直在innodb外围打转。没有进入到innodb的内部。在后续的文章中,以innodb的为主,逐个思考。Bingxi和alex今天了解了fil文件管理。对应的文件为:D:/mysql-5.1.7-beta/storage/innobase/fil/fil0fil.cD:/mysql-5.1.7-bet转载 2012-03-20 18:26:33 · 273 阅读 · 0 评论 -
思考mysql内核之初级系列5---information_schema不是innodb数据字典
上次谈到了innodb缓冲区里面有些页被使用了,这些中有些被数据字典用了。那么什么是数据字典呢?bingxi和alex继续思考。 1) information_schema不是innodb数据字典 bingxi:“alex,我觉得information_schema这个里面存储的不是数据字典,为了准确起见,换个说法,information_schema不是innodb数据字典。”转载 2012-03-20 18:26:23 · 413 阅读 · 0 评论 -
思考mysql内核之初级系列4--innodb缓冲区管理
我们在前面讨论了一些mysql的基础知识,现在将要开始进入innodb引擎,从这里开始我们将开始代码的结构分析,innodb的内容分析之后,将反过来分析查询优化引擎。今天,我们先来讨论innodb缓冲区管理。文件:D:/mysql-5.1.7-beta/storage/innobase/include/buf0buf.hD:/mysql-5.1.7-beta/storage/innob转载 2012-03-20 18:26:12 · 296 阅读 · 0 评论 -
mysql内核分析--innodb哈希表的内部实现(上)
1.哈希表的概述 hash表的实现是innodb的基础功能之一,通过关键值进行映射,从而迅速进行查询、插入、删除的操作。 hash表算法,在数据库内核里面被广泛的使用,举个例子,这个结构将会在下文中继续使用的。/* Data structure for a column in a table */struct dict_col_struct{ hash_no转载 2012-03-20 18:25:22 · 407 阅读 · 0 评论 -
深入理解单表执行计划
一、概述 这篇文章是数据库性能调优技术的第二篇。上一篇讲解的索引调优是数据库性能调优技术的基础。这篇讲解的深入理解单表执行计划,是数据库性能调优的有力工具。 查询语句可以有多种可选执行计划,如何选择效率最高的执行计划?达梦数据库、oracle数据库、sql server数据库都是采用基于成本的查询优化,对备选执行计划进行打分,选择代价最小的执行计划进行执行。转载 2012-03-19 17:59:37 · 416 阅读 · 0 评论 -
B树系列文章(3)--删除、更新操作
4.B树上的删除元组操作 假设B树的组织形式如图7。 删除索引键值为9的记录,执行流程: 1)以索引键值=9查询B树,定位要删除的元组,该元组位于叶子节点L1。 2)删除索引键值=9的入口项,10、16对应的记录向前移动一个位置。参照图8。 一般的转载 2012-03-19 17:56:43 · 429 阅读 · 0 评论 -
B树系列文章(2)--插入操作
3.B树上的插入操作 为了便于问题的描述,现重新构造一个只有两层的B树。见图2。 简单插入操作: 参考图2,先考虑一个简单的操作,向该B树插入一条索引键值为9的记录。执行流行如下: 1)执行索引键值=9的查找操作,确定该新记录应该插入到叶子节点L1中。 2)此时发现叶子节点L1中还是有空闲记录空间的,因此可以确定该新记录可以插入L转载 2012-03-19 17:55:53 · 1037 阅读 · 0 评论 -
MySQL Variable解读
说明:具体参数还是要很对应版本对应,这是dba必须要关注的,新版本的参数名或值可能有修改。 1.autocommit session级别,可以动态更改。 控制mysql是否在每次执行DML之后自动commit,默认自动开启。(1或on) 2.auto_increment_increment session/glob转载 2012-03-19 17:53:22 · 2595 阅读 · 0 评论 -
InnoDB主键设计
InnoDB是clustered-index table,因此对于InnoDB而言,主键具有特殊意义。可以通过主键直接定位到对应的某一数据行记录的物理位置,主键索引指向对应行记录,其他索引则都指向主键索引;因此,可以这么说,InnoDB其实就是一个 B-树索引,这棵B-树的索引就是主键,它的值则是对应的行记录。在InnoDB数据表设计中,我们需要注意几点:1. 显式的定义一个 INT转载 2012-03-19 17:50:59 · 508 阅读 · 0 评论 -
XtraBackup - 开源MySQL在线热备份工具概述
XtraBackup是MySQL咨询公司percona正在开发的一个开源热备份工具。 MySQL是流行的互联网关系数据库,但是MySQL的数据备份是MySQL DBA头疼的事情,原因:1、互联网需要24*7持续运行,不可能允许DBA进行关闭数据库的冷备份。 2、MySQL自己的mysqldump是把数据转换为SQL语句,效率非常低,备份和还原的速度都非常慢,转载 2012-03-19 17:48:00 · 473 阅读 · 0 评论 -
MySQL的优化(本文是Monty在O'Reilly Open Source Convention 2000大会上的演讲)
1、我们可以且应该优化什么?硬件操作系统/软件库SQL服务器(设置和查询)应用编程接口(API)应用程序 -------------------------------------------------------------------------------- 2、优化硬件如果你需要庞大的数据库表(>2G),你应转载 2012-03-19 17:45:53 · 338 阅读 · 0 评论 -
Innodb共享表空间和独立表空间
在使用Innodb引擎时将要面对两种表空间的管理选择的问题,Innodb有两种管理表空间的方法:1. 共享表空间(也可以拆分成多个小的表空间)2. 独立表空间每一个表有一个独立的表空间。我个人推荐使用独立表空间。在性能和运维上独立表空间比共享的表空间有很多优势。下面我将分别说明一下两种表空间管理的特点。共享表空间:优点:可以放表空间分成多个文件存转载 2012-03-19 17:41:17 · 445 阅读 · 0 评论 -
MySQL 查询优化器
这篇描述MySQL查询优化器的工作原理。MySQL查询优化器主要为执行的查询决断最有效的路线(routine,走向)。 一。源代码和概念 这部分讨论优化器关键概念,术语,及在MySQL源代码怎么对应的。 1.定义 狭义定义:优化器,就是DBMS为查询时决断要往哪种执行路径的一系列路线。 MySQL是经常调整查询的路线,所以你得把这篇描述的逻转载 2012-03-19 17:40:05 · 1408 阅读 · 0 评论 -
索引调优
一、概述 随着数据库在各个领域的使用不断增长,越来越多的应用提出了高性能的要求。数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小、索引的创建、语句改写等等。总之,数据库性能调优的目的在于使系统运行得更快。 调优需要有广泛的知识,这使得它既简单又复杂。 说调优简单,是因为调优者不必纠缠于复杂的公式和规则。许多学术界和业界的研究者都在尝试将转载 2012-03-19 17:58:26 · 471 阅读 · 0 评论 -
深入理解散列连接执行计划
一、概述这篇文章是数据库性能调优技术系列的第四篇。上一篇文章讲解了深入理解嵌套循环连接执行计划。上一篇文章中提到两张表的连接有三种执行方式:1)嵌套循环连接;2)散列连接;3)归并连接。散列连接是很重要的连接方式,包含比较多的内容,这篇文章中讲解为什么需要散列连接?如何理解散列连接?和前三篇文章一样,本文讲解的是些比较抽象的内容,不拘泥于具体的数据。所以本文中使用的代价评估转载 2012-03-19 18:02:10 · 1093 阅读 · 0 评论 -
深入理解数据库原理系列(1)---日志系统原理
一:事务系统1.事务的工作模型 事务必须满足原子性,所封装的操作或者全做或者全不做。事务管理系统需要做两件事,1)让日志系统产生日志,2)保证多个事务并发执行,满足ACID特性。 事务系统工作模型,见图1。 如图,事务管理管理器控制查询处理器的执行、控制日志系统以及缓冲区。日志在缓冲区生成,日志管理器在一定的时候控制缓冲转载 2012-03-19 18:03:30 · 528 阅读 · 0 评论 -
Mysql查询优化器浅析(上)
1 定义 Mysql查询优化器的工作是为查询语句选择合适的执行路径。查询优化器的代码一般是经常变动的,这和存储引擎不太一样。因此,需要理解最新版本的查询优化器是如何组织的,请参考相应的源代码。整体而言,优化器有很多相同性,对mysql一个版本的优化器做到整体掌握,理解起mysql新版本以及其他数据库的优化器都是类似的。 优化器会对查询语句进行转化,转化等价的查询语句。举个例子转载 2012-03-20 18:24:13 · 341 阅读 · 0 评论 -
InnoDB页结构浅析
InnoDB将所有的记录存放在数据库页中(也可以称为数据块)。一般情况下,所有的页大小都是16KB。 数据页中不仅仅包含实际的记录,还包含其它的一些内容,比如文件头以及文件尾等等。 InnoDB的页包含以下几个部分:1) Fil Header:文件头2) Page Header:页头3) Infimum+Supremu转载 2012-03-19 18:10:25 · 405 阅读 · 0 评论 -
深入理解mysql之BDB系列(3)---数据页结构
四:数据页结构4.1 B/H主要页结构4.1.1结构图4.1.2数据结构 typedef struct _db_page { DB_LSN lsn; //LSN db_pgno_t pgno;转载 2012-03-19 18:09:32 · 353 阅读 · 0 评论 -
深入理解数据库原理系列(2)---并发控制原理
事务之间的相互影响可能导致数据库状态的不一致,即使各个事务能保持状态的正确性,而且也没有任何故障发生。因此,不同事务中各个步骤的执行顺序必须以某种方式进行规范。控制这些步骤的功能由DBMS的调度器部件完成,而保证并发执行的事务能保持一致性的整个过程称为并发控制。调度器的作用如图1所示。 首先讨论如何保证并发执行的事务能保持数据库状态的正确性。抽象的要求称为可串行性,另外还有一个转载 2012-03-19 18:05:01 · 485 阅读 · 0 评论