MySQL 数据库几种引擎

MySQL 数据库几种引擎

 

数据库引擎取决于MySQL安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MySQL。在缺省情况下,MySQL支持三个引擎:ISAMMyISAMHEAP。另外两种类型InnoDBBerkleyBDB),也常常可以使用。

1ISAM

ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MySQL能够支持这样的备份应用程序。

2MyISAM

MyISAMMySQLISAM扩展格式和缺省的数据库引擎,有如下扩展:

1)、二进制层次的可移植性。

2)NULL列索引。

3)、对变长行比ISAM表有更少的碎片。

4)、支持大文件。

5)、更好的索引压缩。

6)、更好的键码统计分布。

7)、更好和更快的auto_increment处理。

除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作。其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMChk工具和用来恢复浪费空间的MyISAMPack工具。

MyISAM强调了快速读取操作,这可能就是为什么MySQL受到了Web开发如此青睐的主要原因:在Web开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和Internet平台提供商(Internet Presence ProviderIPP)只允许使用MyISAM格式。

HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAMMyISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住,在用完表格之后就删除表格。让我再重复一遍:在你用完表格之后,不要忘记删除表格。

MyISAM优化:

主要参数:

1)key_buffer_size- 这对MyISAM表来说非常重要,是用来设置整个MySQL中常规Key Cache的大小。一般来说,如果MySQL运行在32位平台,此值建议不超过2GB,如果是64位平台上则不用考虑此限制,但也最好不要超过4GB

合理的值取决于索引大小、数据量以及负载 -- 记住,MyISAM表会使用操作系统的缓存来缓存数据,因此需要留出部分内存给它们,很多情况下数据比索引大多了。尽管如此,需要总是检查是否所有的key_buffer 都被利用了 -- .MYI 文件只有 1GB,而 key_buffer 却设置为 4GB 的情况是非常少的。这么做太浪费了。如果你很少使用MyISAM表,那么也保留低于 16-32MB 的 key_buffer_size 以适应给予磁盘的临时表索引所需。

2)、key_buffer_block_size- 索引缓存中的Cache Block Size.

用来设置每个Cache Block的大小,实际上也同时限定了将".MYI"文件中的Index Block被读入时File Block的大小。

 

次要参数:

1)、table_cache-- 打开一个表的开销可能很大。例如MyISAMMYI文件头标志该表正在使用中。你肯定不希望这种操作太频繁,所以通常要加大缓存数量,使得足以最大限度 地缓存打开的表。它需要用到操作系统的资源以及内存,对当前的硬件配置来说当然不是什么问题了。如果你有200多个表的话,那么设置为1024 也许比较合适(每个线程都需要打开表),如果连接数比较大那么就加大它的值。我曾经见过设置为100,000 的情况。

2)、thread_cache-- 线程的创建和销毁的开销可能很大,因为每个线程的连接/断开都需要。我通常至少设置为 16。如果应用程序中有大量的跳跃并发连接并且 Threads_Created的值也比较大,那么我就会加大它的值。它的目的是在通常的操作中无需创建新线程。

3)、query_cache-- 如果你的应用程序有大量读,而且没有应用程序级别的缓存,那么这很有用。不要把它设置太大了,因为想要维护它也需要不少开销,这会导致MySQL变慢。通 常设置为 32-512Mb。设置完之后最好是跟踪一段时间,查看是否运行良好。在一定的负载压力下,如果缓存命中率太低了,就启用它。

4)、sort_buffer_size--如果你只有一些简单的查询,那么就无需增加它的值了,尽管你有 64GB 的内存。搞不好也许会降低性能。

 

Key Cache相关的性能状态参数变量:

1)、key_cache_division_limit 以百分比的形式将整个缓存区划分为多个区域。系统默认为100,即只有Warm Area实际上,在MySQLKey Cache中所使用的LRU算法并不像传统算法,仅仅是访问频率,以及最后访问时间,并通过唯一的链表实现,而是将其分成了两部分。

2)、key_cache_age_threshold控制各区域中的何时被降级,值越小,越容易降级到下一级area中表的扫描分为Sequential ScanRadom Scan 2种方式,read_buffer_size设置sequential scan时使用的缓存,read_rnd_buffer_size设置radom scan时使用的缓存

3)、Key_blocks_not_flushed 键缓存内已经更改但还没有清空到硬盘上的键的数据块数量。

4)、Key_blocks_unused 键缓存内未使用的块数量。你可以使用该值来确定使用了多少键缓存;参见5.3.3节,服务器系统变量Key_buffer_size的讨论。

5)、Key_blocks_used 键缓存内使用的块数量。该值为高水平线标记,说明已经同时最多使用了多少块。

6)、Key_read_requests从缓存读键的数据块的请求数。

7)、 Key_reads从硬盘读取键的数据块的次数。如果Key_reads较大,则Key_buffer_size值可能太小。可以用Key_reads/Key_read_requests计算缓存损失率。

8)、Key_write_requests将键的数据块写入缓存的请求数。

9)、Key_writes向硬盘写入将键的数据块的物理写操作的次数。

10)、Last_query_cost用查询优化器计算的最后编译的查询的总成本。用于对比同一查询的不同查询方案的成本。默认值0表示还没有编译查询。 默认值是0Last_query_cost具有会话范围。

 

3InnoDBBerkley DBBDB

InnoDBBerkley DBBDB)数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MySQL++ API。在使用MySQL的时候,你所面对的每一个挑战几乎都源于ISAMMyISAM数据库引擎不支持事务处理也不支持外来键。尽管要比ISAMMyISAM引擎慢很多,但是InnoDBBDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者或者两者,那你就要被迫使用后两个引擎中的一个了。

你可能感兴趣的:(MySQL 数据库几种引擎)