【MySQL学生手册】其它存储引擎

本文地址:https://www.askmac.cn/archives/mysql-other-storage-engines.html

 

8.3 其它存储引擎

 

 

MySQL服务端还支持除之前所介绍之外的其它几种数据引擎(当然有些存储引擎随着各种原因,或渐渐淡出MySQL主流舞台,或被弃用,而第三方提供的存储引擎更是层出不穷,因此,这里我们就不一一列举了,只介绍官方提到的一些引擎,权当个小知识即可),基于不同版本的MySQL,其默认是否进行了编译安装启用都会有所不同,这里不会做太深入的启用介绍,因此,如果大家感兴趣,可以查看MySQL的官方手册来了解。

 

 

 

8.3.1 EXAMPLE存储引擎

 

你可以将EXAMPLE引擎作为一个最佳的”MySQL存储引擎开发”样例来进行源码学习,事实上此引擎的目的也是如此,它并非用于生产环境,其不支持任何的数据插入操作,它对于有志于开发那些自有存储引擎的开发者起到了一个示范作用。

 

 

8.3.2 MERGE存储引擎

 

 

MERGE存储引擎,这里又个称为MRG_MYISAM存储引擎。它可以将多张完全相同的MyISAM存储引擎表“合而为一”(建立一张MERGE表,其定义包含有多张表结构,列顺序,索引相同的MyISAM表)。

虽然可以合并的限制较为严格,不过如果可用的话也会有以下优点:

  • 更简单的表管理
  • 如果表其底层对应的MyISAM表分布如不同的磁盘,其只读的情况可获得更佳的查询速度。
  • 不受操作系统文件大小限制(每个MyISAM表文件都有其大小限制)。

优点不止于此,不过也有缺点:如MERGE表不可建立FULLTEXT索引;其索引读会慢一些等。

 

 

[Read more…]

【MySQL学生手册】常用存储引擎 – MEMORY

本文地址:https://www.askmac.cn/archives/mysql-storage-engines-memory.html

 

MEMORY配置项:

MEMORY存储引擎作为一个有效且有用的引擎,应该在大多应用设计中考虑其的使用,以提高性能并满足特定的业务需要。以下是是对MEMORY存储引擎最佳实践中的一些建议:

 

 

  • 最小化一张MEMORY表可增长的大小 – 许多应用会使用MEMORY存储引擎来动态倒入,由于没有得到正确的引导而导致表过大,从而产生了较差的性能。这里你可以使用以下解决方案来满足应用需求:
  •    max_heap_table_size – 这个变量设置了MEMORY表被运行增长到的最大大小。此值被用于计算MEMORY表MAX_ROWS值。变量设置对于已存在的MEMORY表没有效果,除非你使用CREATE TABLE进行表重建,或使用ALTER TABLE或TRUNCATE TABLE来进行表修改。
  •    MAX_ROWS – 对于单独MEMORY表,表的最大行数可以在CREATE TABLE(或ALTER TABLE)语句中使用MAX_ROWS语法进行设置。

 

[Read more…]

MYSQL数据库培训

Oracle大学为世界上最流行的开源数据库MySQL提供全面的课程和认证。扩展你的MySQL数据库知识通过行业专家的高品质的MySQL培训课程。一张MySQL证书展示你的专业知识,让你的职业生涯更广阔。

 

 

MySQL 培训和认证

 

Oracle大学对MySQL的培训可以帮助你提高性能,整合业务并管理业务流程和数据。 MySQL课程包括专为数据库管理员和开发人员设计的课程,帮助你掌握MySQL数据库的特性和功能,以及为你的行业认可的证书作好准备。

 

特色课程

 

  • MySQL 入门 (4)覆盖了MySQL数据库的所有基础知识,为之后的学习打下坚实的基础。使用MySQL作为教学工具,学习SQL的的基础知识和关系数据库。此外,它为你的MySQL工程师认证考试作好准备。
  • 适合数据库管理员的MySQL学习(5)是帮助数据库管理员理解重要项目,如安装和升级,用户管理,灾难恢复和优化的核心课程。你也将有机会接触到不同的存储引擎,并学习在哪里可以找到其他MySQL资源。本课程也能为你的MySQL数据库管理员认证考试作准备。
  • 适合开发人员的MySQL学习 (5 )是帮助开发人员策划使用MySQL应用的设计和实施的基础课程。本课程涵盖数据设计,查询和编程必要的SQL语句。它能为你的MySQL开发人员认证考试作准备。
  • MySQL 性能优化 (4 )是专为数据库管理员和其他想要监控和调优MySQL的人员设计的课程。学习评估结构,使用工具,基于性能配置数据库,调优应用和SQL代码,调优服务器,检查存储引擎,评估应用架构,和其他的调优概念。
  • MySQL 高可用性 (3 ) 是专为经验丰富的数据库管理员和系统架构师设计的,帮助他们对不同的高可用性选项分析并形成基础理解,包括MySQL中的集群和复制解决方案。
  • MySQL 集群 (3 )介绍了如何正确配置和管理群集节点,以确保高可用性,如何安装不同的节点,以及对集群的内部知识的深入理解。此外,它能为你的MySQL Cluster数据库管理员认证考试作准备。

 

 

在oracle.com/education/mysql查看完整的MySQL数据库的培训和认证文档。

 

 

关于Oracle大学

 

Oracle大学是首屈一指的Oracle技术和产品的培训的供应商。作为世界上最大的企业培训机构之一,我们提供成几千个线下线上,虚拟和CD-ROM的课程。当你选择了Oracle大学,会有以下优势:

 

  • 非常准确且相关资料的技术培训
  • 讲师的专业知识和经验
  • 100% 学生满意度项目
  • 验证和奖励培训成功的Oracle认证项目
  • 最大和最新的甲骨文课程
  • 为匹配IT工作角色而开发的课程
  • 为产品的重点领域定制的学习路径
  • 在任何时间和地点灵活的学习方式
  • 全球范围最大的培训计划
  • 最大限度的范围和地点的合作伙伴关系

【MySQL学生手册】常用存储引擎 – InnoDB

本文地址:https://www.askmac.cn/archives/mysql-storage-engines-innodb.html

 

 

8.2.2 InnoDB存储引擎

使用InnoDB存储引擎管理的表具有以下等特点:

  • 每个InnoDB表在数据库底层磁盘目录中以一个.frm格式文件代表其存在,而其数据和索引的存储会被放在InnoDB表空间(tablespace
    •   表空间是一个单独的逻辑存储区,其由一个或多个文件或磁盘分区组成。
    •   默认情况下,MySQL仅使用单个InnoDB表空间,其被所有InnoDB表所共享。
    •   表的大小可以超过文件系统所允许最大文件大小。
    •   可以配置InnoDB以建立每个表时使用其自己的表空间
  • 支持事务,可使用COMMIT和ROLLBACK语句
  • 完全遵循ACID原则
  • 在MySQL服务端或运行的主机崩溃后提供自动恢复
  • 提供多版本(Multi-versioning)存储和行级锁(row-level)支持
  • 支持外键和参考一致性,包括级联删除和级联更新。

InnoDB表空间和日志:

InnoDB操作使用两种基于磁盘的资源:一个存储表内容的表空间和一堆记录事务活动的日志文件。

 

每个InnoDB表在数据库磁盘目录中拥有一个.frm格式文件。这和由其它MySQL存储引擎管理的表相同,如MyISAM。然而,InnoDB在管理表内容(数据行和索引)在磁盘上的存储和MyISAM存储引擎不同。默认是,InnoDB使用一个共享的“表空间”,其是由一个或多个文件组成的单个逻辑存储区。所有InnoDB表被存储在此表空间中,但并不是如MyISAM表的针对特定表的对应数据文件和索引文件形式。表空间中还包含有一个回滚段(rollback segment)。当事务修改了行数据,undo日志信息会被存储于此回滚段中,这些信息被用于回滚失败的事务。

[Read more…]

【MySQL学生手册】常用存储引擎 – MyISAM

本文地址:https://www.askmac.cn/archives/mysql-storage-engines-myisam.html

 

8.2 常用存储引擎

MySQL可以使用多种存储引擎来进行工作,因此针对特定需求,用户可以有许多选择。以下为MySQL的一些常用存储引擎(包括了简单的特性比较):

 

MyISAM InnoDB MEMORY
Ÿ   速度快

Ÿ   数据存储在.MYD表文件中

Ÿ   表级锁

Ÿ   支持事务(COMMIT/ROLLBACK)

Ÿ   支持外键

Ÿ   行级锁

Ÿ   数据仅在内存中(如果服务端关闭则数据丢失)

 

8.2.1 MyISAM存储引擎

 

MyISAM存储作为曾经MySQL的默认存储引擎。它所管理的表具有以下特性:

  • 其每个表使用三个文件:
    • 一个格式文件 — 存储表结构定义(frm)
    • 一个数据文件 — 存储表行内容(MYD)
    • 一个索引文件 — 存储表上索引(MYI)
  • 和其他存储引擎一样提供AUTO_INCREMENT列处理
  • 可被转换为可快速访问,压缩的,只读表以节约空间
  • 使用表级锁来管理对MyISAM表访问的查询争用
  • 支持全文索引来查询空间数据类型数据
  • 支持GIS地理空间扩展
  • 表存储格式是便携的,意思是表文件可以直接拷贝至其它主机并被其主机中的服务端所用。
  • 可定义表必须能够存放的最少行数。
  • 当将数据倒入一张空表时,你可以禁用对非唯一索引的更新并在倒入完成后再启用这些索引。
和老式ISAM表相同,MyISAM表使用索引顺序访问方式在进行索引建立。不过MyISAM比ISAM提供更好的性能,因此在MySQL 5.0之后ISAM不在可用,而倾向于使用MyISAM。

[Read more…]

【MySQL学生手册】MySQL存储引擎

本文地址:https://www.askmac.cn/archives/mysql-storage-engines.html

 

第8章 存储引擎

 

章节概述

本章介绍如何MySQL中所使用的存储引擎。你会了解:

  • 在MySQL性能上,存储引擎的使用分配所起到的效果
  • 大多可用的存储引擎
  • 每个引擎的特点及之间的不同之处
  • 如何设置独立的存储引擎类型

 

8.1 MySQL存储引擎

 

当你在通过MySQL建立一张表时,你可以选择使用何种存储引擎。通常,这种选择决定取决于你对应用的需求以及存储引擎各自所能提供的特性而定。每个存储引擎都是一系列特定的操作特性,如使用锁来管理查询争用的方式,或如对应的表是否可提供事务或非事务的支持等。这些存储引擎的特性还涉及到对查询处理性能,并行性,避免死锁等功能。(死锁发生在多个查询互相等待对方完成且都被堵塞不能处理的时候。)

 

8.1.1 考虑特性

每个特定的存储引擎都包含有其唯一的特性和属性,其针对了不同场景及目的的需要。其中一些关键的不同包括了:

  • 并行性(Concurrency 一些应用具有比其它应用更多的粒度锁要求(如行级锁)。选择正确的锁策略可以降低整体开销,这对整体性能有帮助。这个领域也包括了对如多版本并行控制或“快照”读能力的支持。
  • 事务执行(Transaction Support – 不是每种应用需要事务,但对那些需要的应用,这个特性满足了对ACID要求的遵守以及并行等级的改变。
  • 参照完整性(Referential Integrity– 这是一种需要强制遵守关系型数据库参照完整性的特性。
  • 物理存储(Physical Storage– 除了存储数据到物理磁盘的格式使用之外,还涉及到表和索引的所有页大小有关的所有东西。
  • 索引支持(Index Support– 不同的应用趋向于从不同的索引策略中获益,尽管一些如B-tree索引等所有引擎都通用的索引,还有一些索引是每个存储引擎通过自己的方式来生成的索引。
  • 内存缓冲(Memory Caches 虽然有一些对所有引擎通用的内存缓冲设计(如用户连接,MySQL的告诉查询缓冲Query Cache等),不过不同的应用可以通过不同的存储引擎来得到独有且更佳的内存缓冲策略。
  • 性能辅助(Performance Aids– 其包含有如多I/O线程并行操作,线程并发,数据库检查点,批量插入处理及其它功能。
  • 其他特性 – 其包括有地理操作支持,对某些数据修改操作的安全限制及其它等功能。

[Read more…]

【MySQL学生手册】协同(Advisory)锁

本文地址:https://www.askmac.cn/archives/mysql-advisory-lock.html

 

7.3 协同(Advisory)锁

协同锁没有能力避免来自其它客户端的数据访问,但它们基于一种概念,即所有客户端会使用一个约定的规则来协同使用一种资源。这种约定的规则可以是一个锁名,即一个简单的字符串。当这个名字被锁住,此协同锁认为被获取。那么了解到此锁状态的其它的客户端就会抑制并避免其进行和持有锁的用户具有冲突的操作。

 

协同锁使用了一套功能函数实现。为了获取锁,使用GET_LOCK()功能:

第一个参数使用一个字符串定义了被锁的名字,第二个参数是一个以秒为单位的时间值,定义了如果锁无法立刻被获取的情况下,最多等待多长时间。GET_LOCK()但执行成功则返回1,不过如果时间过后,锁还是未能获取,则返回0,执行中异常报错则返回空值。

获取到协同锁的客户端可以调用RELEASE_LOCK()功能来释放锁:

如果锁被成功释放,则RELEASE_LOCK()返回1,如果需要释放的锁是别的客户端锁,则返回0,返回NULL则说明当前名字没有锁。

我们还可以再次通过调用GET_LOCK()来释放之前的锁,或者直接关闭其和服务端之间的连接也可以达到释放锁的目的。

[Read more…]

【MySQL学生手册】显式(Explicit)表锁

本文地址:https://www.askmac.cn/archives/mysql-explicit-lock.html

7.2 显式(Explicit)表锁

客户端可以使用两个语句来管理显式表锁。LOCK TABLES命令会获取表锁,而UNLOCK TABLES命令则会释放锁。对于显式锁的获取,我们可以具体在某些场景中使用:

 

  • 一个隐式锁仅在对于(非事务引擎下的)单个查询执行时间内起到作用。但是对于希望运行多语句跟新且同时不被其它客户端干扰的情况,则不适用。而在执行由事务引擎支持的事务时,锁可以在整个事务时间范围起作用,为了达到这样的目的,你可以获取一个显式锁来维持其效果直到你释放它,这样其它客户端就不能修改你锁住的那些表了。
  • 使用显式锁,可以在将多个语句作为一组进行执行时发挥作用,从而提高效率。首先,服务端减少了获取和释放锁的工作,因为其不必未每个语句都进行其锁的操作。它仅是在操作的最开始时候获取所有所需的锁,并在事务最后释放它们即可。其二,对于那些修改数据的语句,索引刷新操作次数降低了。例如,如果你执行多个INSERT语句,且都使用隐式锁,那么索引的刷新操作将在每个语句之后进行。如果你对表使用了显式锁,那么索引的刷新仅会在所有插入操作完成并释放锁后进行,这样所产生的磁盘活动就更少了。

 

LOCK TABLES语句可以对指定的表进行锁定,并制定索要获取的锁的类型。如,以下语句会在Country表上要求获取读锁,并对City表要求获取写锁:

mysql> LOCK TABLES Country READ, City WRITE;

为了能成功执行lock tables命令,你必须要有lock tables权限,且需要每个被锁表的select权限。

 

如果所要锁定的表正在被使用,那么执行lock tables会陷入等待,在获取到所需的锁之前它都不会返回。

[Read more…]

【MySQL学生手册】MySQL锁

本文地址:https://www.askmac.cn/archives/mysql-lock.html

第7章 锁

 

章节概述

本章介绍如何MySQL的锁(Lock)机制。你会了解:

  • 锁的概念
  • 如何使用显式表锁
  • 如何使用协同(advisory)锁

 

7.1 锁的概念

MySQL服务端使用多线程架构,这样使其能够并行地位多个客户端进行服务。对连接的每个客户端来说,服务端分配了一个线程作为其连接处理。如果每个客户端访问不同的表,它们并不会互相干扰对方。然而,当多个客户端尝试在同一时间访问同一张表,会产生争用并需要客户端间协调。如,一个客户端正在修改行而另一个客户端正在读取它们,或两个客户端正在同时修改同一行,这样都会产生问题。为了避免这些问题引发的数据讹误,MySQL使用锁来进行解决。

 

锁是一种避免由于多个客户端同时进行数据访问而引发问题的机制。锁由服务端管理:它会为某个客户端对数据上锁以限制其它客户端对此数据的访问,直到锁被释放。锁仅允许持有它的客户端对被锁的数据进行访问,而对其它对此数据进行争用的客户端限制访问的操作行为。锁机制所起到的效果是为了在多个客户端进行有冲突的操作时,进行等待,以达到顺序化的数据访问。

 

不是所有并行访问都会产生冲突,因此使用什么类型的锁以允许客户端访问数据则取决于客户端到底是希望进行读还是写:

  • 如果一个客户端希望读数据,其它客户端也希望读这同样的数据,这并不会产生冲突,它们可以在同时进行读取。然而,如果其它客户端如果要进行写(修改)数据的话,就需要等到读取完成才能进行。
  • 如果一个客户端希望写数据,所有其它客户端必须等它写完,不管它们要做的操作是写操作还是读操作。

 

换句话说,一个读取器一定会阻碍写,但是不会阻止其它的读取操作。而写则会对其它读和写都进行阻止。读锁和写锁的作用就是允许这些限制被实现。锁使得客户保持等待直到可以安全进行。在这种方式下,锁通过不允许并行冲突来保证避免数据讹误,以有序的方式读取被改变的数据。

[Read more…]

【MySQL学生手册】mysqlshow程序

本文地址:https://www.askmac.cn/archives/mysqlshow-cmd.html

 

mysqlshow客户端程序可用于生成你的数据库和表的结构信息。它提供了类似show语句显示数据库,数据库下的表,或列信息,索引信息等功能的命令行接口。mysqlshow命令有以下语法:

mysqlshow [options] [db_name [table_name [column_name]]]

mysqlshow命令中的options部分包括有一些标准的连接命令项,如 --host--user等。如果默认使用的连接参数不适合的话,你就需要主动提供这些项的设置。mysqlshow也提供了一些特定操作所使用的项。我们可以调用mysqlshow的 --help项来查看此客户端程序可使用的全部项。

mysqlshow所执行的操作结果取决于你提供的那些非命令项参数:

  • 如果无参数提供,mysqlshow显示的是show databases类似的结果:
  • 使用单个参数,mysqlshow会将其作为数据库名,执行效果类似于对此数据库执行show tables语句:

[Read more…]

沪ICP备14014813号-2

沪公网安备 31010802001379号