您的位置:首页 > 数据库 > MySQL

mysql 数据库引擎常识全集

2015-01-25 12:32 148 查看
1、mysql引擎简介:
MyISAM引擎是mysql关系数据库管理系统的默认存储引擎(mysql 5.5以前)。这种mysql表存贮结构从的旧的ISAM代码扩展出许多有用的功能。在新版本的mysql中,InnoDB引擎由于其对事务参照的完整性,以及更高的并发性等优点开始逐步的取代MYISAM引擎。
#ENGINE=MyISAM myisam表都对应于硬盘上的三个文件。这三个文件有一样的文件名,但是有不同的扩展名指示其类型用途:.frm文件保存表的定义,这个文件并不是myISAM引擎的一部分,而是服务器的一部分;.MYD保存表的数据;MYI是表的索引文件。
MYsql5.5 支持事务的引擎:innodb、ndb(mysql集群引擎)

2、数据库事务介绍:
事物务就是逻辑上的一组sql操作,组成这组操作的各个sql语句,要么全部成功,要么全部失败;
范例:hiboy给higirl转账五元
流程:a,从hiboy银行卡取出五元,计算式money-5.
b,把上面五元钱打入higirl的账户上,higirl收到5块,money+5.
上述转账的过程,对应的sql语句为
update account set money=money-5 where name="hiboy";
update account set money=money-5 where name="higirl";
上述的两条sql操作,在事务中的操作就是要么都执行,要么都不执行,这就是事物的原子性。

3、事务的四大特点:
1、原子性(Atomicity)

事物是一个不可分割的单位,事务中所有sql等操作要么都发生,要么都不发生。
2、一致性(Consistency)
事务发生前和发生后,,数据的完整行必须保持一直。
3、隔离性(Isolation)
当前并发访问数据时,一个正在执行的事务在执行完毕前,对于其它的会话是不可见的,多个并发事务之间的数据是相互隔离的。
#innodb 事务参数 --single-transaction

4、持久性(Durability)
一个事务一旦被提交,她对数据库中的数据改变是永久性的。如果出现错误,事务也不允许撤销,只能通过“补偿性事务”。

4、事务的开启:
数据库默认事务是自动提交的,也就是发一条sql它就执行一条。如果想多条sql放在一个事务中执行,则需要使用事务进行处理。当我们开启一个事务,并且没有提交,mysql会自动回滚事务。或者使用rollbak命令手动回滚事务。
数据库开启事务命令:
set autocommit= OFF禁止自动提交 set autocommit=ON 开启自动提交 SET GLOBAL autocommit= ON; 全局设置
rollback 回滚事务 commit 提交事务 查看: show variables like '%auto%';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| autocommit | OFF |
| automatic_sp_privileges | ON |
| innodb_autoextend_increment | 8 |
| innodb_autoinc_lock_mode | 1 |
| sql_auto_is_null | OFF |
+-----------------------------+-------+5、MyISAM引擎的特点:

1、不支持事务:(事务就是逻辑上sql语句) 举例:银行转账,保持数据的一致性; 2、表级锁定,数据跟新时锁定整个表,其锁定机制是表级锁定,虽然让锁定的实现成本很小但同时大大降低了并发的性能; 3、读写互相堵塞,不仅会在写入时候阻塞读取,但读本身并会阻塞另外的读; 4、只会缓存索引,myisam 可以通过key_buffer_size缓存索引,以大大提高性能减少磁盘IO,但是这个缓存只缓存索引,而不会缓存数据。 #grep key_buffer my.cnf key_buffer_size = 16M 5、读取速度快。占用资源相对少; 6、不支持外键约束,但支持全文索引;

6、MyISAM生产场景:
1、读数据比较多的应用,读写都频繁的场景不适合,读多或者写多的都适合; 2、不需要事物支持的业务(例如银行) 3、读写并发相对较低的业务(纯读纯写高并发的也可以) 4、以读为主的业务,例如:www blog 图片信息数据库,用户数据库。商品库等业务 5、对数据一致性要求不高的业务 6、硬件资源比价差的机器用myISAM 7、使用读写分离的mysql从库可以使用MYISAM #小结:单一数据库的操作都可以适合使用MYISAM ,所谓单一就是尽量纯读或纯写。7、MyISAM调优精要:
1、设置合适的索引 2、调整读写优先级,根据实际需要确保重要操作更优先执行 3、启用延迟插入改善大批量写性能(降低写入频率,尽可能数据一次性写入) 4、尽量顺序操作让insert数据都能写入到尾部,减少堵塞; 5、分散大的时间长的操作,降低单个操作的阻塞时间。 6、降低并发数(减少对mysql访问),某些高并发场景通过应用进行排队队列机制; 7、(对相对静态,更改不频繁)充分利用query cache 或redis。 memcache缓存服务 # grep query my.cnf
query_cache_size = 2M #缓存的空间大小 query_cache_limit = 1M #缓存的限制 query_cache_min_res_unit = 2k #最小缓存对象
8、myISAM 的count只有在全表扫描的时候特别高效,带有其它条件的ccoun都需要进行实际的数据访问; 9、可以把主从同步的主库使用innodb,从库使用MYisam引擎; (不推荐)

8、InnoDB:引擎的特点特性:
#InnoDB使用频率:99%
#对应的数据库的文件:innodb_data_file_path= ibddata1:128:autoextend (初始化的时候自动生产这么大,自动扩展)
1、支持事务;支持4个事务隔离级别,支持多版本读。 2、行级锁定(跟新时一般是锁定当前行):通过索引实现,全表扫描仍然后是锁表。注意间隙锁的影响; 3、读写阻塞与事物隔离级别相关; 4、具有高效的缓存特性:能缓存索引,也能缓存数据; 4、支持分区,表空间,类似oracle数据库; 5、支持外键约束,5.5以前不支持全文索引,以后的支持了。
7、和MYISAM 引擎相比,iNNODB对硬件资源要求比较高 ### : innodb_fuffer_pool_size = 32M 重量级参数 ,不要太大 , 1/8 差不9、InnoDB 生产场景:
1、需要事务支持的业务(具有较好的事务特性); 2、行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成 3、数据读与写都较为频繁的场景 4、数据一致性都要求较高的业务 5、设备硬件内存较大,可以利用innodb 较好的缓存能力来提高内存利用率,尽可能减少磁盘IO # grep -i innodb my.cnf
6、可以独立表空间; #独立表空间对应物理数据文件: 参数: my.cnf 【mysqld】
innodb_file_per_table innodb_data_home_dir =/data/xxx 文件: ll /data/3306/data/ibdatal

10、InnoDB 引擎调优精要:
1、主键尽可能小,避免给Secondary index带来过大的空间负担; 2、避免全表扫描,因为会使用表锁; 3、尽可能缓存所有的索引和数据,提高相应速度,减少磁盘IO消耗; 4、在大批量小插入的时候,尽量自己控制事务而不要使用actocimmit自动提交。有开关可以控制提交方式; 5、合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性; #如果innodb_lush_log_at_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交数据的时候不做任何操作。 6、避免主键跟新,因为这会带来大量的数据移动;11、如何确定MYsql服务器有哪些引擎可用:
查看: show engines ;
mysql> show engines ;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.06 sec)

12、Innodb引擎的重要参数:
default_table_type = InnoDB
innodb_additional_mem_pool_size = 4M
innodb_buffer_pool_size = 2048M
innodb_data_file_path = ibdata1:128M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_log_file_size = 128M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0

13、myISAM 引擎重要的参数: key_buffer_size = 2048M

14、如何修改MySQL引擎:
法1:
创建后引擎的更改,5.0以上
ALTER TABLE TEST ENGINE = INNODB;
ALTER TABLE TEST ENGINE = MyISAM;
查看:
法2:
使用sed对备份内容进行引擎替换;
mysqldump > back。sql
nohup sed -e 's/MyISAM/InnoDB' back.sql > kong.back.sql &
mysql < kong.back.sql
#不适用数据库过大;

法3: 
 使用 mysql_convert_table_forma 命令修改
查看:`which mysql_convert_table_format` --help
范例:mysql_convert_table_format --user=root --password=123456 --socket=/data/3306/mysql.sock --engine=MyISAM kong t2


本文出自 “思想大于技术” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: