4 各种文件

来源:互联网 发布:match sql语句 编辑:程序博客网 时间:2024/04/30 01:09

一、日志文件

1、错误日志

错误日志的初始化:main()------>LOGGER::init_base()------>LOGGER::init_error_log(LOG_FILE);

错误日志的记录:sql_print_error()、sql_print_warning、sql_print_infomation()。


2、慢查询日志:记录慢的SQL查询语言,以帮助优化。默认不开启。

初始化:LOGGER::init_slow_log(LOG_TABLE or LOG_FILE)

记录:slow_log_print()

3、查询日志(普通日志):记录了所有对Mysql数据库请求的信息,无论请求是否得到了执行。默认文件名:主机名.log。

初始化:LOGGER::init_gereral_log(LOG_TABLE or LOG_FILE)

记录:general_log_write()、general_log_print()

备注:慢查询日志和查询日志也可以不记录在文件中,而放入mysql架构下的表中。


4、二进制日志:记录对数据库的所有操作,但是不包括SELECT和SHOW这类操作。文件名如bin_log.00001,二进制的索引文件名为bin_log.index。默认没有启动。使用mysqlbinlog工具查看日志。

初始化:main()------>init_server_components()----->TC_LOG_BINLOG::open()每次启动mysqld打开新的二进制文件,旧的二进制文件用于恢复。

记录:MYSQL_BIN_LOG::write()(注意#define TC_LOG_BINLOG MYSQL_BIN_LOG)

二进制日志的作用:

恢复:某些数据的恢复,如当一个数据库全备文件恢复后,可以通过二进制日志进行point-in-time的恢复。

复制:通过复制和执行二进制日志使得进行实时同步(如master-slave)。

        当使用事务的表存储引擎(如InnoDB)时,所有未提交的二进制日志会被记录到一个缓存中,等该事务提交时直接将缓存中的二进制日志写入到二进制日志文件。默认情况下,二进制日志并不是在每次写的时候同步到磁盘。

        binlog_format可以设置日志格式:STATEMENT即简单的SQL语句;ROW为表的行更改情况(这时可以将InnodB的事务隔离级别设为READ COMMITTED);MIXED为混合。


二、套接字文件:socket.sock(UNIX套接字)

三、pid文件:主机名.pid,保存进程ID。

四、表结构定义文件:记录表的表结构定义,还可以存放视图的定义。文件名.frm。


五、InnoDB存储引擎文件

1、表空间文件:共享表空间文件名ibdata1,将数据按表空间进行存放。不过也可以将每个基于InnodB的表单独产生一个表空间(独立表空间),文件名为表名.ibd。


2、重做日志文件:名称分别为ib_logfile0和ib_logfile1(默认一组有两个),记录了对于InnodB存储引擎的事务日志(关于每个页的更改的物理情况)。InnodB先写重做日志1,写满后在写2,2写满后又往1中写。

比较:二进制日志文件是在事务提交前进行记录的,而在事务进行的过程中,不断有重做日志条目被写到重做日志文件中。

重做日志的写入磁盘是先经过日志缓存,刷新方式有每秒刷新、事务commit时刷新、异步写。


备注:应当还有一个undo-log,关于binlog、undolog(它实际是在ibdata中分配)、redolog的原理,参考:

http://xuebinbin212.blog.163.com/blog/static/1121673762013921111828684/


六、表空间


段:数据段、索引段、回滚段,注意每个段开始处有32个页大小的碎片页,之后才是区,每次一分配就分配四个区;

区:每个区为64页;

页:每页16K,有数据页、Undo页、系统页、数据事务页、插入缓冲位图页、插入缓冲空闲列表页、未压缩的二进制大对象页、压缩的二进制大对象页;

行:注意InnodB是面向行的的存储引擎,而面向列是当前数据库的发展方向。行记录格式有Redundant(旧版本)、Compact、Compressed、Dynamic。


七、InnodB数据页结构

数据页由以下七部分组成:File Header、Page header、Infimun+Supermum Records、User Records(行记录)、Free Space、Page Directory、File Trailer(文件结尾信息)。

File Header:包含该页在表空间中的偏移量、上一个页、下一个页、页类型、被最后修改的日志序列位置LSN;

Page Header:数据页的状态信息,其中的PAGE_FREE指向空闲列表的首指针,OAGE_LAST_INSERT为最后插入记录的位置,PAGE_INDEX_ID当前页属于哪个索引ID,……

Infumum记录是比该页中任何主键值都要小的值;Supermum记录指比任何主键值大的值。这两个是虚拟的行记录。

User Records是实际存储记录的内容

Free Space是空闲空间,当一条记录被删除后,该空间会被加入到空闲链表中。

Page Directory:存放记录的相对位置。注意:B+树索引能找到的只是该记录所在的页,数据库把页载入内存,然后通过Page Directory在进行二叉查找。同时需注意的是directory是稀疏的,即不是每条记录都存有相对位置,而是每n_owned个记录有一个directory。

File Triailer:为了保证页能完整的写入磁盘,这部分包含checksum和FILE_PAGE_END_LSN,通过将这两个值与File Header中的对应值比较,可知页是否完整。


最后一点题外话:

数据库的应用分为两类:一类是OLTP(在线事务处理),如游戏数据库;一类是OLAP(在线分析处理),如日志数据。分区(表分割)更适合OLAP,对于OLTP,分区可能使查询更耗时。


0 0
原创粉丝点击