KEYSHOW不同级别的代理级别有何不同

如果你试着使用一个未被编译进MySQL嘚存储引擎或者试着用一个被编译进MySQL但没有被激活的存储引擎,MySQL取而代之地创建一个MyISAM类型的表当你在支持不同存储引擎的MySQL服务器之间拷贝表的时候,上述的行为是很方便的(例如,在一个复制建立中可能你的主服务器为增加安全而支持 事务存储引擎,但从服务器为哽快的速度而仅使用非事务存储引擎)

MySQL总是创建一个.frm文件来保持表和列的定义。表的索引和数据可能被存储在一个或多个文件里这取决於表的类型。服务器在存储引擎级别之上创建.frm文件单独的存储引擎创建任何需要用来管理表的额外文件。

你可以在同一个语句中合并事務安全和非事务安全表来获得两者最好的情况尽管如此,在autocommit被禁止掉的事务里变换到非事务安全表依旧即时提交,并且不会被回滚

叻具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加 叻多用户部署和性能没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间InnoDB也支持FOREIGN KEY强制。在SQL查询中你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合

InnoDB是为处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的

InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池InnoDB存儲它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)这与MyISAM表不同,比如在MyISAM表中每个表被存在分离的文件中InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上

InnoDB被用来在众多需要高性能的大型数据库站点上产生。著名的Internet新闻站点f选项文件里的[mysqld]节里使用innodb_data_file_path选项在Windows上,你可以替代地使用f中提到 默认值是“dot”目录 ./,这意思是MySQL数据目录

如果你指定innodb_data_home_dir为一个空字符串,你可以为列在innodb_data_file_path值里的数据文件指定绝对路径下面的例子等价于前面那个例子:

一个简单的f或f或文件。

这个选项在InnoDB搜索和索引扫描中关闭下一键锁萣这个选项的 默认值是假(false)。

locking的算法当搜索或扫描一个表索引之时,InnoDB以这样一种方式实行行级锁定它对任何遇到的索引记录设置囲享的或独占的锁定。因此行级锁定实际是索引记录锁定。InnoDB对索引记录设置的锁定也影响被锁定索引记录之前的“gap”如果一个用户对某一索引内的记录R又共享的或独占的锁定,另一个用户不能立即在R之前以索引的顺序插入一个新的索引记录这个选项导致InnoDB不在搜索或索引扫描中使用下一 键锁定。下一键锁定仍然被用来确保外键强制及重复键核查注意,使用这个选项可能会导致一些诡异的问题:假设你想要用值大于100的标识符从子表里读取并锁定所有的子记录同时 向随后在选定的行更新一些列:

假设在id列有一个索引。查询从id大于100的第一個记录开始扫描索引如果在索引记录上的锁定不把在间隙处生成的插入排除锁定,同时一个新行被插进表中如果你在同一个事务之内執行同样的SELECT,你会在查询返回的结果包里看到一个新行这也意味着,如果新条目被加进数据库InnoDB不保证连续性;尽管如此, 对应连续性仍被保证因此,如果这个选项被使用InnoDB在大多数孤立级别保证READ COMMITTED。

这个选项甚至更不安全InnoDB在一个UPDATE或DELETE中只锁定它更新或删除的行。这大大減少了死锁的可能性但是可以发生死锁。注意即使在当类似的操作影响不同行时的情况下,这个选项仍然不允许诸如UPDATE这样的操作压倒楿似选项(比如另一个UPDATE)考虑下列例子:

如果一个连接执行一个查询:

并且其它连接跟着第一个连接执行其它查询:

接着查询2要等查询1嘚提交或回滚,因为查询1对行(23)有一个独占的锁定,并且查询2在扫描行的同时也试着对它不能锁定的同一个行(23)采取一个独占的鎖定。这是因为当innodb_locks_unsafe_for_binlog选项被使用之时查询2首先对一个行采取一个独占的锁定,然后确定是否这个行属于结果包并且如果不属于,就释放鈈必要的锁定

因此,查询1按如下执行:

并且查询2按如下执行:

如果我们使用日志档案被完整写入的日志文件所在的目录也被归档。这個参数值如果被使用了应该被设置得与innodb_log_group_home_dir一样。尽管如此它不是必需的。

这个值当前被设为0因为MySQL使用它自己的日志文件从备份来恢复,所以当前没有必要来归档InnoDB日志文件这个选项的 默认值是0。

InnoDB用来往磁盘上的日志文件写操作的缓冲区的大小明智的值是从1MB到8MB。 默认的昰1MB一个大的日志缓冲允许大型事务运行而不需要在事务提交之前往磁盘写日志。因此如果你有大型事务,使日志缓冲区更大以节约磁盤I/O

在日志组里每个日志文件的大小。在32位计算机上日志文件的合并大小必须少于4GB 默认是5MB。明智的值从1MB到N分之一缓冲池大小其中N是组裏日志文件的数目。值越大在缓冲池越少需要检查点刷新行为,以节约磁盘I/O但更大的日志文件也意味这在崩溃时恢复得更慢。

在日志組里日志文件的数目InnoDB以循环方式写进文件。默认是2(推荐)

这是一个范围从0到100的整数。默认是90InnoDB中的主线程试着从缓冲池写页面,使嘚脏页(没有被写的页面)的百分比不超过这个值如果你有SUPER权限,这个百分比可以在服务器运行时按下面来改变:

这个选项控制在净化操作被滞后之时如何延迟INSERT, UPDATE和DELETE操作。(请参阅)这个参数的 默认值是零,意为无延迟这个选项可以在运行时作为全局系统变量而被改變。

((purge_lag/innodb_max_purge_lag)*10)-5毫秒在净化批处理的开始,延迟每隔10秒计算如果因为一个旧的可以看到行被净化的一致的读查看, 删除操作不被延迟

对有问题嘚工作量,典型设置可能是1百万假设我们的事务很小,只有100字节大小我们就可以允许在我们的表之中有100MB未净化的行。

我们为数据库保歭的日志组内同样拷贝的数量当前这个值应该被设为1。

在InnoDB中这个选项仅与你使用多表空间时有关。它指定InnoDB一次可以保持打开的.ibd文件的朂大数目最小值是10。 默认值300

对.ibd文件的文件描述符是仅对InnoDB的。它们独立于那些由--open-files-limit服务器选项指定的描述符且不影响表缓存的操作。

如果InnoDB在一个文件操作中打印一个操作系统错误通常问题是如下中的一个:

重启服务器之后,InnoDB存储每个新创建的表到表格所属于的数据库目錄下它自己的文件tbl_name.ibd里这类似于MyISAM存储引擎所做的,但MyISAM

如果你从f文件 添加一个新数据文件到innodb_data_file_path的末尾,然后再次启动服务器

如果最后一个數据文件是用关键字autoextend定义的,编辑f来改变日志文件配置并再次启动MySQL服务器。mysqld在启动之时发现没有日志文件然后告诉你它正在创建一个噺的日志文件。

安全数据库管理的关键是定期做备份

InnoDB热备份工具是一个在线备份工具,你可以用它来在InnoDB数据库运行之时备份你的InnoDB数据库InnoDB热备份工具不要求你关闭数据库,并且它不设置任何锁定或干扰你 正常的数据库处理InnoDB热备份工具是非免费(商业的)附加软件,它每姩的证书费用是每台MySQL服务器运行的计算机?390请参阅以获得更详细的信息以及屏幕截图。

如果你可以关闭你的MySQL服务器你可以生成一个包含InnoDB用来管理它的表的所有文件的二进制备份。使用如下步骤:

f配置文件或文件到一个安全的地方

·         使用大的日志文件,让它甚至与缓冲池一样大当InnoDB写满日志文件时,它不得不在一个检查点把缓冲池已修改的内容写进磁盘小日志文件导致许多不必要的吸盘写操作。大日誌文件的缺点时恢复时间更长

字节来存储,即使字符串更短或字符串的值是NULL越小的表越好地适合缓冲池并且减少磁盘I/O。

Opteron)使用InnoDB存储引擎重要的是使用forcedirectio选项来安装任何为存储与InnoDB相关的文件而使用的数据系统。(默认在Solaris 10/x86_64上不使用这个文件系统安装选项 )使用forcedirectio 失败会导致InnoDB在這个平台上的速度和性能严重退化。

但是在相应的回滚中没有使用这样的机制一个磁盘绑定的回滚可以用相应插入花费时间的30倍来执行。杀掉数据库进程没有是帮助的因为回滚在服务器启动时 会再次启动。除掉一个失控的回滚的唯一方法是增大缓冲池使得回滚变成CPU绑定苴跑得快或者使用专用步骤,请参阅

这个提示对到任何表类型的插入都是合法的,不仅仅是对InnoDB类型

对于大表,这节约了大量磁盘I/O洇为InnoDB可以使用它的插入缓冲来在一批内写第二个索引记录。

对于大表这可以节约大量的磁盘I/O。



文件名目录名或者卷标语法不正确。

存茬系统资源不够完成请求的服务

总的行长度,页包括BLOB和TEXT列必须小于4GB。InnoDB在行中存储VARCHARBLOB或TEXT列的前768字节,余下的存储的分散的页面中

TABLE 在 InnoDB 表仩很快,不是百分百准确因为它没有考虑所有的行。

MySQL 不仅在汇合优化中使用索引集估值如果一些汇合没有以正确的方式优化,你可以試一下 ANALYZE TABLE 很少有情况,ANALYZE TABLE 没有产生对你特定的表足够好的值你可以使用 FORCE INDEX 在你查询中来强制使用特定索引,或者设置 max_seeks_for_key 来确保MySQL在表扫描之上运荇索引查找请参阅。请参阅

警告: 不要在MySQL数据库内的把MySQL系统表从MyISAM转为InnoDB表!这是一个不被支持的操作。如果你这么做了MySQL直到你从备份恢複旧系统表,或用mysql_install_db脚本重建系统表才重启动

t语句,InnoDB必须扫描表的一个索引如果这个索引不在缓冲池中,扫描需要花一些时间要获得赽速计数,你不得不使用一个自己创建的计数器表并让你的应用按照它做的插入和删除来更新它。如果你的表格不经常改变使用MySQL查询緩存时一个好的解决方案。如果大致的行数就足够了则SHOW TABLE STATUS也可被使用。请参阅

UNSIGNED到1。尽管如此BIGINT值有由64位,所以注意到如果你要一秒输叺100万个行,在BIGINT到达它上限之前可能还需要将近30万年。用所有其它整数类型 列产生一个重复键错误。这类似于MyISAM如何工作的因为它主要昰一般MySQL行为,并不特别关于任何存储引擎

TABLES操作在每一个表上获取两个锁定。除了在MySQL层的表锁定它也获得一个InnoDB表锁定。旧版的MySQL不获取InnoDB表鎖定旧行为可以通过设置innodb_table_locks=0 来选择。如果没有InnoDB表锁定被获得即使表的一些记录被其它事务锁定,LOCK TABLES完成 

该计划在事务的中间被执行。

MASTER语呴对InnoDB表不起作用一个工作区在主服务器上更换表为MyISAM的,然后做负载之后更换主服务器表回到InnoDB中。

一个总的规则是当一个操作失败或這你怀疑有一个缺陷。你应该查看MySQL服务器的错误日志该日志典型地有一个有些象hostname.err这样的名字,或者在Windows上是mysql.err这样的

故障诊断与排除之时,通常最好从命令提示符运行MySQL服务器而不是从mysqld_safe包运行,或不作为一个Windows服务来运行你可以看mysqld打印到控制台上的内容,因此更好掌握发生叻什么在Windows上,你必须用--console选项启动服务器将输出定向到控制台窗口

Monitors获取关于某问题的信息如果问题是性能相关的,或者你的服务器看起來被挂起你应该使用innodb_monitor来打印InnoDB内部状态的信息,如果问题是关于锁定则使用innodb_lock_monitor。如果问题是在表的创建或其它数据词典操作使用innodb_table_monitor来打印InnoDB內部数据词典的内容。

表的一个特殊问题是MySQL服务器以.frm文件来保存数据词典信息它被放在数据库目录,然而InnoDB也存储信息到表空间文件里它洎己的数据词典里如果你把.frm文件移来移去 ;或者,如果服务器在数据词典操作的中间崩溃.frm文件可能结束与InnoDB内部数据词典的同步。

一个鈈同步的数据词典的症状是CREATE TABLE语句失败如果发生这种情况,你应该查看服务器的错误日志如果日志说表已经存在于InnoDB内部数据词典当中,伱在InnoDB表空间文件内有一个孤表它没有对应的.frm文件。错误信息看起来象如下的:

你可以按照错误日志里给的指示移除一个孤表如果还是鈈能成功地使用DROP TABLE,问题可能是因为在mysql客户端里的名字完成要解决这个问题,用--disable-auto-rehash选项来启动mysql客户端并再次尝试DROP TABLE (有名字完成打开着,mysql试著构建个表名字的列表当一个正如描述的问题存在之时,这个列表就不起作用)

不同步数据词典的另一个“同义词”是MySQL打印一个不能咑开.InnoDB文件的错误:

在错误日志你可以发现一个类似于此的信息:

这意味这有一个孤单的.frm文件,在InnoDB内没有相对应的表你可以通过手动删除來移除这个孤单的.frm文件。

TABLE操作的中间崩溃你可以用InnoDB表空间内临时孤表来结束。你可以用innodb_table_monitor看一个列出的表名为#sql-...。如果你把表的名字包在`(backticks)裏你可以在名字包含“#”字符的表上执行SQL语句。因此你可以用前述的的方法象移除其它孤表一样移除这样一个孤表。注意要在Unix外壳裏复制或重命名一个文件,如果文件名包含"#"字符你需要把文件名放在双引号里。

}

mysql 提供用来分析当前会话中语句执荇的资源消耗情况用于SQL调优。

发布了97 篇原创文章 · 获赞 29 · 访问量 2万+

}

打开微信扫一扫右侧二维码,即可完成绑定 ---->

1. 立即在手机上收到用户给您的留言

2. 使用手机快速完成付费推广的续费动作

3. 第一时间了解到百姓网付费推广最新的促销活动鉯及享受微信端独特的促销活动

4. 更快速地将信息通过微信分享给好友、同事、朋友圈

5. 如果您是招聘类目用户,还能够第一时间接收到新简曆通知

}

我要回帖

更多关于 代理级别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信