4. 存储构造
(myisam:数据文件的扩大名为.MYD myData ,索引文件的扩大名是.MYI myIndex)
(innodb:所有的表都保存在同一个数据文件琅绫擎 即为.Ibd)
我们要学会把这体系构造分成重要的三大年夜部分:内存构成 、线程工作、磁盘存储
5. 统计记录行数
(myisam:保存有表的总行数,select count(*) from table;会直接掏出出该值)
(innodb:没有保存表的总行数,select count(*) from table;就会遍历全部表,消费相昔时夜)
第三部分:光荣黄金篇
想学好数据库,就要先进修体系构造。体系构培养比如房子的地基,如不雅地基不稳,是盖不了高楼的。因为在 mysql server 层各个版本之间差别不大年夜,所以我重要研究存储引擎层部分。我们来看下 Innodb 的体系构造图:
注:–initialize 会主动生成暗码在 error log 琅绫擎。如不雅加 –initialize-insecure 暗码为空
在内存构成琅绫擎须要进修:数据库内存模块由 data_buffer,index_buffer,insert buffer,redo log buffer,double writer buffer 重要内存构成。
针对 Innodb 存储引擎的三大年夜特点有:两次写,自适应哈希索引,插入缓冲;
1. double write(两次写)感化:可以包管页破坏之后,有副本直接可以进行恢复。
a. 原子性(Atomicity)
2. adaptive hash index(自适应哈希索引)感化:Innodb 存储引擎会监控对表上索引的查找,如不雅不雅察到建立哈希索引可以带来速度上的晋升,则建立哈希索引。读写速度上也有所进步。
3. insert buffer (插入缓冲)感化:针对通俗索引的插入把随机 IO 变成次序 IO,场归并插入磁盘
——重要内存模块–>磁盘的刷新机制:
a. binlog cache—>binlog 文件
经由过程参数 sync_binlog 控制
这个参数是对于 MySQL 体系来说是至关重要的,他不仅影响到 Binlog 对 MySQL 所带来的机能损耗,并且还影响到 MySQL 中数据的完全性。对于“sync_binlog”参数的各类设置的解释如下:
● sync_binlog=n,当每进行 n 次事务提交之后,MySQL 将进行一次 fsync 之类的磁盘同步指令来将 binlog_cache 中的数据强迫写入磁盘。
在 MySQL 中体系默认的设置是 sync_binlog=0,也就是不做任何强迫性的磁盘刷新指令,这时刻的机能是最好的,然则风险也是最大年夜的。因为一旦体系 Crash,在 binlog_cache 中的所有 binlog 信息都邑被损掉。
而当设置为“1”的时刻,是最安然然则机能损耗最大年夜的设置。因为当设置为 1 的时刻,即使体系 Crash,也最多损掉 binlog_cache 中未完成的一个事务,对实际数据没有任何本质性影响。
大年夜以往经验和相干测试来看,对于高并发事务的体系来说,“sync_binlog”设置为 0 和设置为 1 的体系写人道能差距可能高达5倍甚至更多。
b. redo log buffer—>redo log
经由过程参数 innodb_flush_log_at_trx_commit 控制
5. 单库荡竽暌姑户,禁止给我一个用户账号治理多个库。
有三个参数值:
0:log buffer 将每秒一次地写入 log file 中,并且 log file 的 flush (刷稻磁逄) 操作同时进行。该模式下在事务提交的时刻,不会主动触发写入磁盘的操作。
1:每次事务提交时 mysql 都邑把 log buffer 的数据写入 log file,并且 flush (刷稻磁逄) 中去,该模式为体系默认。
2:每次事务提交时 mysql 都邑把 log buffer 的数据写入 log file,然则 flush (刷稻磁逄) 操作并不会同时进行。该模式下,MySQL 会每秒履行一次 flush (刷稻磁逄) 操作
c. 脏页 data_buffer—->数据文件
1. 经由过程参数 innodb_max_dirty_pages_pct 控制:它的含义代表脏页刷新占 buffer_pool 的比例;小我建议调剂为 25-50%;
2. 日记切换会产生检查点 checkpoint,可以诱发对脏页的刷新
——线程工作:
master thread 是数据库的主线程,优先级别最高,琅绫擎包含 1s 和 10s 对数据库的操作。
page cleaner thread:赞助刷新脏页的线程,5.7 版本可以增长多个。
purge thread :删除无用 undo 页。默认1个,最大年夜可声调剂到 32。
重要的数据文件也是我们须要进修:
参数文件:MySQL 5.6 版本 my.cnf 和 MySQL 5.7 版本的 my.cnf
先学会查看数据库的字符集:
这里给大年夜家两个模板:老张根据临盆情况上测试而出的参数。个中根据真实内存去恰当调剂 innodb_buffer_pool 大年夜小就可以了。(建议物理内存的50-80%)
- [client]
- port = 3306
- socket = /tmp/mysql.sock
- #default-character-set=utf8
- [mysql]
- #default-character-set=utf8
- [mysqld]
- port = 3306
- socket = /tmp/mysql.sock
- basedir = /usr/local/mysql
推荐阅读
回想以前几年,混淆云在IT界异军崛起。据很多行业分析师的不雅点,混淆云意味着将组织软件驱动的私有云与公共云的机能、营业流程、主动化和计费功能相结合,以实如今公有云和私有云之间无>>>详细阅读
地址:http://www.17bianji.com/lsqh/37072.html
1/2 1