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

6、MySQL存储引擎、事务、锁

2016-01-11 15:22 639 查看
<--目录-->
1)查看存储引擎
2)修改存储引擎
3)Innodb和MyIsam讲解
4)事务
5)锁

【查看存储引擎】
1.查看当前数据库管理系统支持哪些引擎

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 |
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
5 rows in set (0.00 sec)

#还可以通过如下方法查询
mysql> show variables like 'have%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| have_community_features | YES |
| have_compress | YES |
| have_crypt | YES |
| have_csv | YES |
| have_dynamic_loading | YES |
| have_geometry | YES |
| have_innodb | YES |
| have_ndbcluster | NO |
| have_openssl | DISABLED |
| have_partitioning | YES |
| have_query_cache | YES |
| have_rtree_keys | YES |
| have_ssl | DISABLED |
| have_symlink | DISABLED |
+-------------------------+----------+
14 rows in set (0.00 sec)

#查看服务器默认使用的存储引擎
mysql> show variables like 'storage_engine';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | MyISAM |
+----------------+--------+
1 row in set (0.00 sec)

#显示当前服务器用的是什么存储引擎
mysql> show variables like "table_type";
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| table_type | MyISAM |
+---------------+--------+
1 row in set (0.00 sec)

2.修改默认存储引擎
方法1:
1、首先打开my.cny配置文件
[mysqld]
#MySQL服务器的存储引擎
default-storage-engine=innodb

2、重启服务
service mysqld restart

3、再次查看

mysql> show variables like 'storage_engine';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+
1 row in set (0.00 sec)

方法2:
alter table 表名 engine=存储引擎名alter table t1 engine=MyISAMcreate talbe 表名(字段列表)engine=存储引擎名;create table t1(id int)engine=innodb;

方法3:
mysql_convert_table_format --usr=root --password=wsyht123 --socker=/data/3306/mysql.sock --engine-MyISAM wsyht t1 #wsyht是库名,和t1是表名

【Innodb和MyIsam讲解】
MyISAM 引擎适用的生产业务场景
1、不需要事务支持的业务(例如转账就不行,充值付款)
2、一般为读写数据比较多的应用,读写都频繁场景不适合,读多或者写多的都适合
3、读写并发访问相对较低的业务(纯读线写高并发也可以)(锁定机制问题)
4、数据修改相对较少的业务,(阻塞问题)
5、以读为主的业务,例如:www, blog,图片信息数据库,用户数据库,商品库等业务
6、对数据一致性要求不是很高的业务
小结:单一对数据库的操作都可以使用MyISAM,所谓单一就是尽量纯读,或纯写(insert,update,delete)等,

MyISAM引擎调优精要
1、设置合适的索引(缓存机制)
2、调整读写优先级,根据实际需求确保重要操作更优先执行
3、启用延迟插入改善大批量读写入性能(降低写入频率,尽可能多条数据一次性写入)
4、尽量顺序操作insert数据都写入到尾部,减少阻塞
5、分解大的时间长的操作,降低单个操作的阻塞时间
6、降低并发数(减少对MySQL访问),某些高并发场景通过应用进行排对对列机制Q对列
7、对相对静态(更改不频繁)的数据库数据,充分利用Query Cache或memcached缓存服务可以术大的提 高访问效率

InnoDB引擎适合用的生产业务场景
1、需要事务支持的业务(具有较好的事务特性)
2、行级锁定对高并发有很好的适应能力,但需要确保查询通过索引完成
3、数据读写及更新都较为频繁的场景,如:BBS,SNS,微博,微信等
4、数据一致性要求较高的业务,例如:充值转账,银行卡转账

5、硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘IO

InnoDB引擎调优精要
1、主健尽可以小,避免给Secondary index带来过大的空间负担
2、避免全表扫描,因为会使用表锁
3、尽可能缓存所有的索引和数据,提高响应速度,减少磁盘IO消耗
4、在大批量插入的时候,尽量自已控制事务而不要使用autocommit自动提交,有开关可以控制提交方式
5、合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性,如果Innodb_flush_log_at_trx_commit的值为0,log,buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作
6、避免主健更新,因为这会带来大量的数据移动

Innodb和MyIsam的区别
InnoDB特性: 支持行锁,支持事务,支持外健 ,批量插入速度慢,内存使用高,空间使用高,数据可压缩,独享表空间
MyISAM:支持表锁,不支持事务,不支持外健 ,批量插入速度快,内存使用低,空间使用低,数据不可压缩,共享表空间

生产环境中如何选用MySQL引擎在一般既有读又有写的业务中,建议使用innodb引擎,一句话尽可能多的使用innodb

mysql存储引擎 I/O insert out 插进去 读出来
1.mysql 体系结构
mysql是由连接池、sql接口、分析器、优化器、
缓存和缓冲、管理工具、存储引擎、物理存储设备
1.连接池:进程数限制、内存检查、缓存检查等
2.SQL接口:用户通过sql客户发过来的命令,由sql接口接收,sql操作有:
DML数据操作语言:查询,修改,升级数据等
DDL数据定义语言:创建一个新的数据库,新的索引,删除一个用户等
3.分析器:分析查询语句 事务处理 对象访问权限
4.优化器:优化访问路径、生成执行树
5.缓存和缓冲 保存sql查询结果
6.管理工具,备份,恢复,安全,移植,集群等,这些工具一般和文件系统打交道
不需要和mysql-server打交道,他们对应的都是命令。
7.存储引擎:用来管理文件系统,将逻辑结构转换为物理结构的程序。负责为数据库执行实际的数据I/O操作
8.不同的存储引擎有不同的功能和存储方式;物理存储设备(文件系统)

【事务】
事务:你的一次sql操作从开始执行到正确执行结速的这个过程称为事务事务回滚:恢之到未操作一切动作前的状态EXAMPLE:#创建测试需要的表,注意存储引擎一定要为innodbmysql> use wsyht
Database changed

mysql> create table t1(
-> id int(3) primary key auto_increment,
-> name varchar(10) not null
-> )engine=innodb;

mysql> insert into t1 values(1,'wsyht'),(2,'peter'),(3,'jenkins');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select *from t1;
+----+---------+
| id | name |
+----+---------+
| 1 | wsyht |
| 2 | peter |
| 3 | jenkins |
+----+---------+
3 rows in set (0.00 sec)

#关闭自动提交
set global autocommit=0

#开启一个事务
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

#更新一条记录
mysql> update t1 set name='test' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

#提交事务
mysql> commit;
Query OK, 0 rows affected (0.01 sec)

#发现记录已经更改生效
mysql> select *from t1;
+----+---------+
| id | name |
+----+---------+
| 1 | test |
| 2 | peter |
| 3 | jenkins |
+----+---------+
3 rows in set (0.00 sec)

#开启另外一个事务
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update t1 set name='wsyht' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select *from t1;
+----+---------+
| id | name |
+----+---------+
| 1 | wsyht |
| 2 | peter |
| 3 | jenkins |
+----+---------+
3 rows in set (0.00 sec)

#回滚事务,只要开启事务还没提交就可以进行回滚
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

#发现数据已经回滚
mysql> select *from t1;
+----+---------+
| id | name |
+----+---------+
| 1 | test |
| 2 | peter |
| 3 | jenkins |
+----+---------+
3 rows in set (0.00 sec)

【锁】
锁机制(解决用户的并发访问问题)
锁类型
写锁(delete update insert)互斥锁 排他锁
读锁(select desc show)共享锁

锁粒度
表锁(myisam) 并发访问量不高 系统开销小
行锁(innodb) 并发访问高 系统开销大
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息