information_schema系列十

1:INNODB_FT_CONFIG

这张表存的是全文索引的信息,查询前可以先通过以下语句查询一下开启全文索引的表:

show variables like ‘innodb_ft_aux_table‘;

只有两个列还是相当的简单的:

name Description
KEY The name designating an item of metadata for an InnoDB table containing a FULLTEXT index.
VALUE The value associated with the corresponding KEY column, reflecting some limit or current value for an aspect of a FULLTEXT index for an InnoDBtable.

2:INNODB_FT_BEING_DELETED 和INNODB_FT_DELETED

INNODB_FT_BEING_DELETED 这张表是INNODB_FT_DELETED的一个快照。而且只在OPTIMIZE TABLE 的时候才会使用。OPTIMIZE TABLE 下面会好好讲一下。

每次开始执行OPTIMIZE TABLE的时候,INNODB_FT_BEING_DELETED都会被清空,这个表的生命周期是很短的。只有指定innodb_ft_aux_table的时候才会有值,一般情况下都是空的(INNODB_FT_DELETED也是)。

INNODB_FT_DELETED这个表就比较屌了,能够记录有全文索引的INNODB表被删除的行记录。这个表主要是为了避免DML语句执行的时候昂亏的索引充足才会记录被删除的行记录信息。 删除的记录不会被立即清除,而是存储在了INNODB_FT_DELETED中,只有当OPTIMIZE TABLE发生的时候才会被清除掉。这个表只有一个DOC__ID列,是指向innodb_ft_index_table 这张表。

3:INNODB_FT_INDEX_TABLE

这个表存储的是关于INNODB表有全文索引的索引使用信息的,同样这个表也是要设置innodb_ft_aux_table以后才能够使用的,一般情况下是空的。SET GLOBAL

innodb_optimize_fulltext_only=ON;

mysql> use test;
mysql> CREATE TABLE articles (
      id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
      title VARCHAR(200),
      body TEXT,
      FULLTEXT (title,body)
    ) ENGINE=InnoDB;
mysql> INSERT INTO articles (title,body) VALUES
    (‘MySQL Tutorial‘,‘DBMS stands for DataBase ...‘),
    (‘How To Use MySQL Well‘,‘After you went through a ...‘),
    (‘Optimizing MySQL‘,‘In this tutorial we will show ...‘),
    (‘1001 MySQL Tricks‘,‘1. Never run mysqld as root. 2. ...‘),
    (‘MySQL vs. YourSQL‘,‘In the following database comparison ...‘),
    (‘MySQL Security‘,‘When configured properly, MySQL ...‘);
mysql> SET GLOBAL innodb_optimize_fulltext_only=ON;
Query OK, 0 rows affected (0.00 sec)
mysql> OPTIMIZE TABLE articles;
+---------------+----------+----------+----------+
| Table         | Op       | Msg_type | Msg_text |
+---------------+----------+----------+----------+
| test.articles | optimize | status   | OK       |
+---------------+----------+----------+----------+
1 row in set (0.00 sec)

mysql> SET GLOBAL innodb_ft_aux_table = ‘test/articles‘;
Query OK, 0 rows affected (0.00 sec)

mysql> USE INFORMATION_SCHEMA;
mysql> SELECT word, doc_count, doc_id, position FROM INNODB_FT_INDEX_TABLE LIMIT 5;
+------------+-----------+--------+----------+
| word       | doc_count | doc_id | position |
+------------+-----------+--------+----------+
| 1001       |         1 |      4 |        0 |
| after      |         1 |      2 |       22 |
| comparison |         1 |      5 |       44 |
| configured |         1 |      6 |       20 |
| database   |         2 |      1 |       31 |
+------------+-----------+--------+----------+

INNODB_FT_DEFAULT_STOPWORD这个表存放的是stopword 的信息,怎么定义stopword 的信息可以以后补充一下:

5:INNODB_FT_INDEX_CACHE

这张表存放的是插入前的记录信息,也是为了避免DML时候昂贵的索引重组。我们可以通过设置以下两个变量来设置大小:

innodb_ft_cache_size 和 innodb_ft_total_cache_size.

下面详细看一下OPTIMEZE TABLE

首先看一下语法:

OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ...

我们知道mysql存储引擎里面的数据和索引数据都是物理存储的,所以说为了减少空间使用和访问表的时候能有更好的IO表现,所以说当表执行OPTIMIZE TABLE的时候,是会发生切实的变化的.

一般以下集中情况下,我们会使用OPTIMIZE TABLE来进行优化:

1:在大量的插入,更新,或者删除INNODB表以后,我们再执行是很有必要的.此时如果执行OPTIMIZE TABLE的话,整表和表上所有的索引都会重组,而且不使用的表空间会被回收给操作系统.

2:在大量的插入,更新,或者删除有全文索引的INNODB表的字段以后,不过要首先设置innodb_optimize_fulltext_only=1,也可以通过指定innodb_ft_num_word_optimize 的值来指定能在索引里面更新多少记录.记录数满的时候就要通过OPTIMIZE TABLE来优化表.

3:在 MyISAM和 ARCHIVE 表做大量的删除的时候就需要执行OPTIMIZE TABLE,或者是 MyISAM和 ARCHIVE 表做了字段长度的更改,如果此时表中有大字段的话,就更需要执行OPTIMIZE TABLE 来优化表了.因为被删除的记录的位置还是会保存,并不会进行回收,等待新纪录插入,或者OPTIMIZE TABLE 进行重组才回回收.而且最重要的一点是OPTIMIZE TABLE以后性能会得到很大的提升,特别是表做过较大的变更以后在执行,性能提升会非常的明显.

OPTIMEZE TABLE 需要的权限:

对表insert 和 select权限.

而且OPTIMIZE TABLE 对分区表也是支持的,具体的语法是

ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;

从上面就可以看出来OPTIMEZE TABLE对于INNODB,MyISAM和 ARCHIVE 的表都是适用的,对于其他引擎的数据表都是不适用的,如果想要使用OPTIMIZE TABLE 优化表,就要在启动mysqld的时候使用--skip-new参数启动.

OPTIMIZE TABLE 可以在线DDL,通过指定(ALGORITHM=INPLACE) ,不过这个只支持INNODB表,普通表和分区表都是支持的.表重建的方式有两种,OPTIMIZE TABLE 和 ALTER TABLE ... FORCE两种方式都可以触发表重建.

OPTIMIZE TABLE 也有适用于 ALGORITHM=COPY的一些条件:

1:当old_alter_table参数设置为ON的时候,OPTIMIZE并不会重建,而是使用一个临时表先把记录插进去来做处理.这个时候就要使用ALGORITHM=COPY来处理了.

2:当mysqld以--skip-new 为方式启动的时候

3:当INNODB表含有全文索引的时候 ,就只能够使用ALGORITHM=COPY来进行优化了

INNODB的数据存储是按照page-allocation的方式存储的,这和MYASIM引擎是不相同的,所以当我们考虑要OPTIMEZE一张表的时候,一定要先考虑以下的几个问题:

1:INNODB表的索引碎片是有所保留的,一般情况下是最多只能够占用93%的,剩余的一些是要保留起来用于update更新时候的页分裂来分配空间

2:删除操作会留下一部分的空间,只有当OPTIMIZE TABLE的时候才会重新的回收.

3:update的记录等于是对原有的数据页进行重新的写入,这和数据类型和行格式是有很大关系的.这个是有前提条件的,就是原有的页有足够的空间能够书写新数据.

4:高并发的情况下,会造成索引的间隙,这个产生的主要原因就是因为MySQL的事物是基于MVCC来实现的.

OPTIMIZE TABLE 对于MYASIM表的支持:

1:如果表有删除或者行拆分的话,就要repair table

2:如果索引页没有划分,就会重新划分索引页

3:统计信息如果不准确的话,就会重新更新统计信息

OPTIMIZE TABLE 返回信息尅看一下:

Column Value
Table The table name
Op Always optimize
Msg_type status, error, info, note, or warning
Msg_text An informational message

但是还要记住一点就是5.7.4以前的版本OPTIMIZE TABLE的时候会锁定全表,之后版本的INNODB表就就可以在线OPTIMIZE 了.而且更重要的是OPTIMIZE TABLE 会记录二进制日志,所以说对于复制的机器是会传送到slave上的.而且他对R-TREE结构的索引是不起作用的.

快速分析mysql的表信息,MYASIM引擎:

myisamchk --quick --check-only-changed --sort-index --analyze

重新组织表:

ALTER TABLE [tbl_name] TYPE=innodb

修改表行格式:

alter table your_table row_format=compressed
时间: 2024-08-04 10:40:57

information_schema系列十的相关文章

information_schema系列十二

1: INNODB_SYS_VIRTUAL 表存储的是INNODB表的虚拟列的信息,当然这个还是比较简单的,我们直接通过SHOW CREATE TABLE 或者DESC TABLE就能看得到. Column name Description TABLE_ID An identifier representing the table associated with the virtual column; the same value as INNODB_SYS_TABLES.TABLE_ID. P

Exchange Server2013 系列十:证书的配置

杜飞 经过前面的配置,基本上可以进行简单的邮件通讯了,但是当用户通过OWA连接邮箱时会报下面的提示: 其他一些服务,如 Outlook Anywhere 和 Exchange ActiveSync,也要求在 Exchange 2013 服务器上配置证书.下面咱们就看一下证书的配置: 首先,我们需要安装内部CA.在此,我就在DC01上安装CA. 选择 AD证书服务,如下图所示: 然后,连续下一步之后,选中下图所示的证书颁发机构和证书颁发机构WEB注册. 稍等片刻之后,等证书颁发机构安装成功.接下来

struts2官方 中文教程 系列十二:控制标签

介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项目:struts_basic2 本帖地址:struts2官方 中文教程 系列十二:控制标签 即 http://www.cnblogs.com/linghaoxinpian/p/6941683.html 下载本章节代码 struts2 if标签 我们在thankyou.jsp中添加如下代码: <s:i

Web前端开发人员和设计师必读文章推荐【系列十】

<Web前端开发人员和设计师必读文章推荐系列十>给大家带来最近两个月发布在<梦想天空>的优秀文章,特别推荐给 Web 开发人员和设计师阅读.梦天空博客关注 前端开发 技术,展示最新 HTML5 和 CSS3 技术应用,分享实用的 jQuery 插件,推荐优秀的 网页设计 案例,共享精美的设计素材和优秀的 Web 开发工具.希望这些文章能帮助到您. HTML5 & CSS3 应用 2012五大主流浏览器 HTML5 和 CSS3 兼容性大比拼 不可思议!23个纯 CSS3 打

SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据

原文:SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应(比如OGC规范.KML规范)的GIS专业理论知识.

SQL Server 2008空间数据应用系列十:使用存储过程生成GeoRSS聚合空间信息

原文:SQL Server 2008空间数据应用系列十:使用存储过程生成GeoRSS聚合空间信息 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应(比如OGC规范.KML规范)的GIS专业理论知识. 5.其他相

Exchange Server 2013系列十二:邮箱的基本管理

杜飞 邮箱是 Exchange 组织中信息工作人员最常用的收件人类型.每个邮箱都与一个 Active Directory 用户帐户关联.用户可以使用邮箱发送和接收邮件,并可以存储邮件.约会.任务.便笺和文档.邮箱是 Exchange 组织中用户的主要邮件传递和协作工具.每个邮箱由 Active Directory 用户以及存储在 Exchange 邮箱数据库中的邮箱数据组成(如下图所示).邮箱的所有配置数据都存储在 Exchange 用户对象的 Active Directory 属性中.邮箱数据

S3C2416裸机开发系列十五_GCC下uCOS的移植(1)

S3C2416裸机开发系列十五 GCC下uCOS的移植(1) 象棋小子    1048272975 操作系统是用来管理系统硬件.软件及数据资源,控制程序运行,并为其它应用软件提供支持的一种系统软件.根据不同的种类,又可分为实时操作系统.桌面操作系统.服务器操作系统等.对于一些小型的应用,对系统实时性要求高,硬件资源有限等的情况下,应尽量避免使用复杂庞大的操作系统(如Linux),使用小型的实时操作系统(如uCOS)更能满足应用的需求.笔者此处就uCOS-II的移植作一个简单的介绍. 1. 代码准

S3C2416裸机开发系列十五_GCC下uCOS的移植(2)

S3C2416裸机开发系列十五 GCC下uCOS的移植(2) 象棋小子    1048272975 4. uCOS配置 uCOS是可裁减实时操作系统,可以根据实际的应用对内核未使用到的功能进行裁减,以进一步节省系统宝贵的硬件资源,通常可用的uCOS-II内核代码在6K~26K,这在uCOS-II配置文件os_cfg.h中进行配置,这个配置文件在源码目录为os_cfg_r.h,从目录中拷贝添加到uCOS/uCOS-II/Cfg目录中,并重命名为os_cfg.h. #ifndef OS_CFG_H