mysql引擎与操作系统的关系_MySQL Study案例之
1、数据库和实例
数据库:物理操作系统文件或其他形式文件类型的集合。在MySQL中,数据库文件可以是frm、myd、myi、ibd结尾的文件。当使用NDB引擎
MySql Study案例之--MySql体系和存储引擎 1、数据库和实例 数据库:物理操作系统文件或其他形式文件类型的集合。在MySQL中,数据库文件可以是frm、myd、myi、ibd结尾的文件。当使用NDB引擎时,数据库文件可能不是操作系统上的文件,而是存放与内存之中的文件,但是定义仍然不变。 数据库实例:由数据库后台进程/线程以及一个共享内存区组成。共享内存可以被运行的后台进程/线程所共享。需要牢记的是,数据库实例才是真正用来操作数据库文件的。 在MySQL中,实例和数据库通常关系是一一对应,即一个实例对应一个数据库,一个数据库对应一个实例。但是,在集群情况下可能存在一个数据库可被多个实例访问的情况。 MySQL被设计为一个单进程多线程架构的数据库。 2、MySQL进程[root@rh6~]#mysqld_safe& [root@rh6~]#ps-ef|grepmysql|grep-vgrep root41684130014:48pts/100:00:00/bin/sh./mysqld_safe mysql42944168014:48pts/100:00:14/usr/local/mysql/bin/mysqld--basedir=/usr/local/mysql--datadir=/var/lib/mysql--plugin-dir=/usr/local/mysql/lib/plugin--user=mysql--log-error=/var/log/mysqld.log--pid-file=/var/run/mysqld/mysqld.pid--socket=/var/lib/mysql/mysql.sock root46434130015:26pts/100:00:00mysql-hlocalhost-uroot-p MySQL配置文件: [root@rh6~]#mysql--help|grepmy.cnf orderofpreference,my.cnf,$MYSQL_TCP_PORT, /etc/mysql/my.cnf/etc/my.cnf~/.my.cnf 数据文件路径: mysql>showvariableslike'datadir'\G ***************************1.row*************************** Variable_name:datadir Value:/var/lib/mysql/ 1rowinset(0.00sec) [root@rh6bin]#ls-l/var/lib/mysql/ total28688 -rw-rw----1mysqlmysql56Jan2817:25auto.cnf -rw-rw----1mysqlmysql18874368Feb214:48ibdata1 -rw-rw----1mysqlmysql5242880Feb214:48ib_logfile0 -rw-rw----1mysqlmysql5242880Jan2817:21ib_logfile1 drwx------2mysqlroot4096Jan2817:21mysql srwxrwxrwx1mysqlmysql0Feb214:48mysql.sock drwx------2mysqlmysql4096Jan2817:21performance_schema drwx------2mysqlroot4096Jan2817:21test 3、MySQL的结构 在具体介绍MySQL的存储引擎之前,先来介绍一下MySQL的结构。 从图中可以看到MySQL由以下几个部分组成:连接池 管理服务和工具组件 SQL接口 查询分析器 优化器 缓存 插入式存储引擎 物理文件 4、InnoDB存储引擎: InnoDB是Mysql数据库的一种存储引擎: InnoDB给Mysql的表提供了 事务、回滚、崩溃修复能力、多版本并发控制的事务安全、间隙锁(可以有效的防止幻读的出现)、支持辅助索引、聚簇索引、自适应hash索引、支持热备、行级锁。还有InnoDB是Mysql上唯一一个提供了外键约束的引擎。 InnoDB存储引擎中,创建的表的表结构是单独存储的并且存储在.frm文件中。数据和索引存储在一起的并且存储在表空间中。但是默认情况下mysql会将数据库的所有InnoDB表存储在一个表空间中的。其实这种方式管理起来非常的不方便而且还不支持高级功能所以建议每个表存储为一个表空间实现方式为:使用服务器变量innodb_file_per_table = 1。 如果需要频繁的进行更新、删除操作的数据库也可选择InnoDB存储引擎。因为该存储引擎可以实现事务提交和回滚。 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool)、重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool),分别由配置文件中的参数innodb_buffer_pool_size和innodb_log_buffer_size的大小决定。 InnoDB体系结构:后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。此外,将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常情况下InnoDB能恢复到正常运行状态。 后台线程 由于Oracle是多进程的架构(Windows下除外),因此可以通过一些很简单的命令来得知Oracle当前运行的后台进程,如ipcs命令。一般来说,Oracle的核心后台进程有CKPT、DBWn、LGWR、ARCn、PMON、SMON等。 很多DBA问我,InnoDB存储引擎是否也是这样的架构,只不过是多线程版本的实现后mysql系统,我决定去看InnoDB的源代码,发现InnoDB并不是这样对数据库进程进行操作的。InnoDB存储引擎是在一个被称做master thread的线程上几乎实现了所有的功能。 默认情况下,InnoDB存储引擎的后台线程有7个—4个IO thread,1个master thread,1个锁(lock)监控线程,1个错误监控线程。IO thread的数量由配置文件中的innodb_file_ io_threads参数控制,默认为4,如下所示。mysql>showengineinnodbstatus\G ***************************1.row*************************** Type:InnoDB Name: Status: ===================================== 15020217:15:33INNODBMONITOROUTPUT ===================================== Persecondaveragescalculatedfromthelast19seconds ----------------- BACKGROUNDTHREAD ----------------- srv_master_threadloops:0srv_active,0srv_shutdown,8787srv_idle srv_master_threadlogflushandwrites:8787 ---------- SEMAPHORES ---------- OSWAITARRAYINFO:reservationcount3 OSWAITARRAYINFO:signalcount3 Mutexspinwaits2,rounds60,OSwaits1 RW-sharedspins2,rounds60,OSwaits2 RW-exclspins0,rounds0,OSwaits0 Spinroundsperwait:30.00mutex,30.00RW-shared,0.00RW-excl ------------ TRANSACTIONS ------------ Trxidcounter2305 Purgedonefortrx'sn:o Historylistlength0 LISTOFTRANSACTIONSFOREACHSESSION: ---TRANSACTION0,notstarted MySQLthreadid3,OSthreadhandle0x7fe2a80c2700,queryid45localhostrootinit showengineinnodbstatus -------- FILEI/O -------- I/Othread0state:waitingforcompletedaiorequests(insertbufferthread) I/Othread1state:waitingforcompletedaiorequests(logthread) I/Othread2state:waitingforcompletedaiorequests(readthread) I/Othread3state:waitingforcompletedaiorequests(readthread) I/Othread4state:waitingforcompletedaiorequests(readthread) I/Othread5state:waitingforcompletedaiorequests(readthread) I/Othread6state:waitingforcompletedaiorequests(writethread) I/Othread7state:waitingforcompletedaiorequests(writethread) I/Othread8state:waitingforcompletedaiorequests(writethread) I/Othread9state:waitingforcompletedaiorequests(writethread) Pendingnormalaioreads:0[0,0,0,0],aiowrites:0[0,0,0,0], ibufaioreads:0,logi/o's:0,synci/o's:0 Pendingflushes(fsync)log:0;bufferpool:0 161OSfilereads,5OSfilewrites,5OSfsyncs 0.00reads/s,0avgbytes/read,0.00writes/s,0.00fsyncs/s ------------------------------------- INSERTBUFFERANDADAPTIVEHASHINDEX ------------------------------------- Ibuf:size1,freelistlen0,segsize2,0merges mergedoperations: insert0,deletemark0,delete0 discardedoperations: insert0,deletemark0,delete0 Hashtablesize276707,nodeheaphas0buffer(s) 0.00hashsearches/s,0.00non-hashsearches/s --- LOG --- Logsequencenumber1602871 Logflushedupto1602871 Pagesflushedupto1602871 Lastcheckpointat1602871 0pendinglogwrites,0pendingchkpwrites 8logi/o'sdone,0.00logi/o's/second ---------------------- BUFFERPOOLANDMEMORY ---------------------- Totalmemoryallocated137363456;inadditionalpoolallocated0 Dictionarymemoryallocated43148 Bufferpoolsize8192 Freebuffers8042 Databasepages150 Olddatabasepages0 Modifieddbpages0 Pendingreads0 Pendingwrites:LRU0,flushlist0singlepage0 Pagesmadeyoung0,notyoung0 0.00youngs/s,0.00non-youngs/s Pagesread150,created0,written1 0.00reads/s,0.00creates/s,0.00writes/s Nobufferpoolpagegetssincethelastprintout Pagesreadahead0.00/s,evictedwithoutaccess0.00/s,Randomreadahead0.00/s LRUlen:150,unzip_LRUlen:0 I/Osum[0]:cur[0],unzipsum[0]:cur[0] -------------- ROWOPERATIONS -------------- 0queriesinsideInnoDB,0queriesinqueue 0readviewsopeninsideInnoDB Mainthreadprocessno.4294,id140611110070016,state:sleeping Numberofrowsinserted0,updated0,deleted0,read0 0.00inserts/s,0.00updates/s,0.00deletes/s,0.00reads/s ---------------------------- ENDOFINNODBMONITOROUTPUT ============================ 1rowinset(0.00sec) 附: Oracle 体系结构图 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |