Mysql引擎innodb(mysql5.7几的默认为innboob)

2024-05-16 16:00:02 :51

mysql引擎innodb(mysql5.7几的默认为innboob)

其实mysql引擎innodb的问题并不复杂,但是又很多的朋友都不太了解mysql5.7几的默认为innboob,因此呢,今天小编就来为大家分享mysql引擎innodb的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

mysql5.7几的默认为innboob

5.7的就可以。InnoDB是一种用来平衡高可用和高性能的存储引擎。在MySQL5.7版本中,InnoDB是默认的MySQL存储引擎。DML语句操作遵循ACID模型,使用事务机制提供崩溃恢复能力来保护用户数据通过行级锁和一致性读特性增加多用户访问时的性能和并行度。

MySQL innodb引擎深入讲解

表空间(ibd文件),一个MySQL实例可以对应多个表空间,用于存储记录,索引等数据。

段,分为数据段、索引段、回滚段,innodb是索引组织表,数据段就是B+Tree的叶子节点,索引段为非叶子节点,段用来管理多个区。

区,表空间的单元结构,每个区的大小为1M,默认情况下,innodb存储引擎页大小为16K,即一个区中一共有64个连续的页。

页,是innodb存储引擎磁盘管理的最小单元,每个页的大小为16K,为了保证页的连续性,innodb存储引擎每次从磁盘申请4~5个区。

行,innodb存储引擎数据是按行进行存储的。Trx_id 最后一次事务操作的id、roll_pointer滚动指针。

i nnodb的内存结构 ,由Buffer Pool、Change Buffer和Log Buffer组成。

Buffer Pool : 缓冲池是主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池么有数据,则从磁盘加载并缓存),然后再以一定频率刷新磁盘,从而减少磁盘IO,加快处理速度。

缓冲池以page页为单位,底层采用链表数据结构管理page,根据状态,将page分为三种类型:

1、free page 即空闲page,未被使用。

2、clean page 被使用page,数据没有被修改过。

3、dirty page 脏页,被使用page,数据被修改过,这个page当中的数据和磁盘当中的数据 不一致。说得简单点就是缓冲池中的数据改了,磁盘中的没改,因为还没刷写到磁盘。

Change Buffer :更改缓冲区(针对于非唯一二级索引页),在执行DML语句时,如果这些数据page没有在Buffer Pool中,不会直接操作磁盘,而会将数据变更存在更改缓冲区Change Buffer中,在未来数据被读取时。再将数据合并恢复到Buffer Pool中,再将合并后的数据刷新到磁盘中。

二级索引通常是非唯一的,并且以相对随机的顺序插入二级索引页,同样,删除和更新可能会影响索引树中不相邻的二级索引页。如果每一次都操作磁盘,会造成大量磁盘IO,有了Change Buffer之后,我们可以在缓冲池中进行合并处理,减少磁盘IO。

Adaptive Hash Index: 自适应hash索引,用于优化对Buffer Pool数据的查询,InnoDB存储引擎会监控对表上各索引页的查询,如果观察到hash索引可以提升速度,则建立hash索引,称之为自适应hash索引。无需人工干预,系统根据情况自动完成。

参数:innodb_adaptive_hash_index

Log Buffer: 日志缓冲区,用来保存要写入到磁盘中的log日志数据(redo log、undo log),默认大小为16M,日志缓冲区的日志会定期刷新到磁盘中,如果需要更新,插入或删除许多行的事务,增加日志缓冲区的大小可以节省磁盘IO。

参数: innodb_log_buffer_size 缓冲区大小

innodb_flush_log_at_trx_commit 日志刷新到磁盘时机

innodb_flush_log_at_trx_commit=1 表示日志在每次事务提交时写入并刷新到磁盘

2 表示日志在每次事务提交后写入,并每秒刷新到磁盘一次

0 表示每秒将日志写入并刷新到磁盘一次。

InnoDB 的磁盘结构,由系统表空间(ibdata1),独立表空间(*.ibd),通用表空间,撤销表空间(undo tablespaces), 临时表空间(Temporary Tablespaces), 双写缓冲区(Doublewrite Buffer files), 重做日志(Redo Log).

系统表空间(ibdata1): 系统表空间是更改缓冲区的存储区域,如果表是在系统表空间而不是每个表文件或者通用表空间中创建的,它也可能包含表和索引数据。

参数为: innodb_data_file_path

独立表空间(*.ibd): 每个表的文件表空间包含单个innodb表的数据和索引,并存储在文件系 统上的单个数据文件中。 参数: innodb_file_per_table

通用表空间: 需要通过create tablespace 语法创建,创建表时 可以指定该表空间。

create tablespace xxx add datafile ’file_name’ engine=engine_name

create table table_name .... tablespace xxx

撤销表空间(undo tablespaces): MySQL实例在初始化时会自动创建两个默认的undo表空间(初始大小16K,undo_001,undo_002),用于存储undo log 日志

临时表空间(Temporary Tablespaces): innodb使用会话临时表空和全局表空间,存储用 户创建的临时表等数据。

双写缓冲区(Doublewrite Buffer files): innodb引擎将数据页从Buffer Pool刷新到磁盘前,先将数据页写入缓冲区文件中,便于系统异常时恢复数据。

重做日志(Redo Log): 是用来实现事务的持久性,该日志文件由两部分组成,重做日志缓冲区(redo log buffer)以及重做日志文件(redo log),前者是在内存中,后者在磁盘中,当事务提交之后会把修改信息都会存储到该日志中,用于在刷新脏页到磁盘时,发送错误时,进行数据恢复使用。以循环方式写入重做日志文件,涉及两个文件ib_logfile0,ib_logfile1。

那内存结构中的数据是如何刷新到磁盘中的? 在MySQL中有4个线程负责刷新日志到磁盘。

1、Master Thread, mysql核心后台线程,负责调度其它线程,还负责将缓冲池中的数据异 步刷新到磁盘中,保持数据的一致性,还包括脏页的刷新,合并插入缓冲、undo页的回 收。

2、IO Thread,在innodb存储引擎中大量使用了AIO来处理IO请求,这样可以极大地提高数 据库的性能,而IO Thead主要负责这些IO请求的回调。

4个读线程 Read thread负责读操作

4个写线程write thread负责写操作

1个Log thread线程 负责将日志缓冲区刷新到磁盘

1个insert buffer线程 负责将写入缓冲区内容刷新到磁盘

3、Purge Thread,主要用于回收事务已经提交了的undo log,在事务提交之后,undo log 可能不用了,就用它来回收。

4、Page Cleaner Thread, 协助Master Thread 刷新脏页到磁盘的线程,它可以减轻主线程 的压力,减少阻塞。

事务就是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失效。

事务的4大特性分为:

如何保证事务的4大特性,原子性,一致性和持久性是由innodb存储引擎底层的两份日志来保证的,分别是redo log和undo log。对于隔离性是由锁机制和MVCC(多版本并发控制)来实现的。

redo log,称为重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性。该日志文件由两部分组成: 重做日志缓冲redo log buffer及重做日志文件redo log file,前者是在内存中,后者是在磁盘中,当事务提交之后会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘,发送错误时,进行数据的恢复使用,从而保证事务的持久性。

具体的操作流程是:

1、客户端发起事务操作,包含多条DML语句。首先去innodb中的buffer pool中的数据页去查找有没有我们要更新的这些数据,如果没有则通过后台线程从磁盘中加载到buffer pool对应的数据页中,然后就可以在缓冲池中进行数据操作了。

2、此时缓冲池中的数据页发生了变更,还没刷写到磁盘,这个数据页称为脏页。脏页不是实时刷新到磁盘的,而是根据你配置的刷写策略进行刷写到磁盘的(innodb_flush_log_at_trx_commit,0,1,2三个值)。如果脏页在往磁盘刷新的时候出现了故障,会丢失数据,导致事务的持久性得不到保证。为了避免这种现象,当对缓冲池中的数据进行增删改操作时,会把增删改记录到redo log buffer当中,redo log buffer会把数据页的物理变更持久化到磁盘文件中(ib_logfile0/ib_logfile1)。如果脏页刷新失败,就可以通过这两个日志文件进行恢复。

undo log,它是用来解决事务的原子性的,也称为回滚日志。用于记录数据被修改前的信息,作用包括:提供回滚和MVCC多版本并发控制。

undo log和redo log的记录物理日志不一样,它是逻辑日志。可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,当update一条记录时,它记录一条对应相反的update记录,当执行rollback时,就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。

undo log销毁: undo log 在事务执行时产生,事务提交时,并不会立即删除undo log,因为这些日子可能用于MVCC。

undo log存储: undo log 采用段的方式进行管理和记录,存放在前面介绍的rollback segment回滚段中,内部包含1024个undo log segment。

mvcc(multi-Version Concurrency Control),多版本并发控制,指维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能,MVCC的具体实现,还需要依赖于数据库记录中的三个隐式字段,undo log日志、readView。

read committed 每次select 都生成一个快照读

repeatable read 开启事务后第一个select语句才是快照读的地方

serializable 快照读会退化为当前读。

mvcc的实现原理

DB_TRX_ID: 最近修改事务ID,记录插入这条记录或最后一次修改该记录的事务ID

DB_ROLL_PTR: 回滚指针,指向这条记录的上一个版本,用于配合undo log,指向上一个 版本

DB_ROW_ID: 隐藏主键,如果表结构没有指定主键,将会生成该隐藏字段。

m_ids当前活跃的事务ID集合

min_trx_id: 最小活跃事务id

max_trx_id: 预分配事务ID,当前最大事务id+1,因为事务id是自增的

creator_trx_id: ReadView创建者的事务ID

版本链数据访问规则:

trx_id: 表示当前的事务ID

1、trx_id == creator_trx_id? 可以访问读版本--》成立的话,说明数据是当前这个事务更改的

2、trx_id 成立,说明数据已经提交了。

3、trx_id》max_trx_id?不可用访问读版本-》 成立的话,说明该事务是在ReadView生成后才开启的。

4、min_trx_id

MYSQL中InnoDB是什么

innodb是mysql数据库的一种存储引擎。此外还有好几种存储引擎。如myisam,merge,memory,berkeleydb,csv,archive……不同存储引擎所支持的数据库性能有所不同。如innodb支持事务,而默认的myisam是不支持的

如何修改MySQL数据库引擎为INNODB

,如果你要使用事务以及行级锁就必须使用INNODB引擎。如果你要使用全文索引,那必须使用myisam。INNODB的实用性,安全性,稳定性更高但是效率比MYISAM稍差,但是有的功能是MYISAM没有的。首先修改my.ini,,在下加上:其中的蓝色字体是要指定的数据库引擎名称。用sql语句修改已经建成表的引擎:下面贴出我的my.ini文件供参考():按照以上的代码提示操作,我们就能够成功地修改MySQL数据库引擎为INNODB了。本文就介绍到这里,如果您想了解更多MySQL数据库的知识,不妨看一下这里的文章:,相信一定会带给您收获的!

mysql数据库支持的存储引擎有哪些默认的存储引擎是什么主要特性有什么

1、MySQL常见的存储引擎有:InnoDB、MyISAM。

2、Mysql 5.0之后的版本,默认的存储引擎就是InnoDB。

3、各自主要特点有:

  • 事务:MyISAM不支持,InnoDB支持。

  • 锁级别: MyISAM 表级锁,InnoDB 行级锁及外键约束。

  • MyISAM存储表的总行数;InnoDB不存储总行数。

  • MyISAM采用非聚集索引,B+树叶子存储指向数据文件的指针。InnoDB主键索引采用聚集索引,B+树叶子存储数据。

  • MyISAM适合场景: 插入不频繁,查询非常频繁,如果执行大量的SELECT,MyISAM是更好的选择, 没有事务。

  • InnoDB适合场景: 可靠性要求比较高,或者要求事务; 表更新和查询都相当的频繁, 大量的INSERT或UPDATE。

巧用MySQL InnoDB引擎锁机制解决死锁问题[2]

  索引 KEY_TSKTASK_MONTIME (STATUS_ID MON_TIME)

  分析 涉及的两条语句应该不会涉及相同的TSK_TASK记录 那为什么会造成死锁呢?

  查询MySQL官网文档 发现这跟MySQL的索引机制有关 MySQL的InnoDB引擎是行级锁 我原来的理解是直接对记录进行锁定 实际上并不是这样的

  要点如下:

  不是对记录进行锁定 而是对索引进行锁定

  在UPDATE DELETE操作时 MySQL不仅锁定WHERE条件扫描过的所有索引记录 而且会锁定相邻的键值 即所谓的next key locking

  如语句UPDATE TSK_TASK SET UPDATE_TIME = NOW() WHERE ID 》 会锁定所有主键大于等于 的所有记录 在该语句完成之前 你就不能对主键等于 的记录进行操作

  当非簇索引(non cluster index)记录被锁定时 相关的簇索引(cluster index)记录也需要被锁定才能完成相应的操作

  再分析一下发生问题的两条SQL语句 就不难找到问题所在了

  当 update TSK_TASK set STATUS_ID= UPDATE_TIME=now () where STATUS_ID= and MON_TIME

  假设 update TSK_TASK set STATUS_ID= UPDATE_TIME=now () where ID in ( ) 几乎同时执行时 本语句首先锁定簇索引(主键) 由于需要更新STATUS_ID的值 所以还需要锁定KEY_TSKTASK_MONTIME 的某些索引记录

  这样第一条语句锁定了KEY_TSKTASK_MONTIME 的记录 等待主键索引 而第二条语句则锁定了主键索引记录 而等待KEY_TSKTASK_MONTIME 的记录 在此情况下 死锁就产生了

  笔者通过拆分第一条语句解决死锁问题

  先查出符合条件的ID select ID from TSK_TASK where STATUS_ID= and MON_TIME 《 date_sub(now() INTERVAL minute) 然后再更新状态 update TSK_TASK set STATUS_ID= where ID in (… )

  至此 死锁问题彻底解决

lishixinzhi/Article/program/MySQL/201311/29601

怎么理解 MySQL 常见的两种存储引擎:MyISAM与InnoDB

InnoDB 引擎:InnoDB 引擎提供了对数据库 acid 事务的支持,并且还提供了行级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。MySQL 运行的时候,InnoDB 会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保存表的行数的,所以当进行 select count() from table 指令的时候,需要进行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发度较高的场景下使用会提升效率的。MyIASM 引擎:MySQL 的默认引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行插入和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不过和 InnoDB 不同的是,MyIASM 引擎是保存了表的行数,于是当进行 select count() from table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将 MyIASM 作为数据库引擎的首选。MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。不过,5.5版本之后,MySQL引入了InnoDB(事务性数据库引擎),MySQL 5.5版本后默认的存储引擎为InnoDB。大多数时候我们使用的都是 InnoDB 存储引擎,但是在某些情况下使用 MyISAM 也是合适的比如读密集的情况下。

Mysql 的存储引擎,myisam和innodb的区别

简单的表达: MyISAM 是非事务的存储引擎;适合用于频繁查询的应用;表锁,不会出现死锁;适合小数据,小并发innodb是支持事务的存储引擎;合于插入和更新操作比较多的应用;设计合理的话是行锁(最大区别就在锁的级别上);适合大数据,大并发。

程序员面试宝典之Mysql数据库Innodb引擎的4个隔离级别

题目:请阐述Mysql Innodb引擎的4个隔离级别 难度:三星 面试频率:五星 这道题真的是一道数据库的高频题,数据库题除了索引的原理之外就是这道题的面试频率最高。 1.Read uncommitted(读未提交):,最低的隔离级别,可以一个事务读到其他事务没有提交的数据,也称脏读,这个隔离级别很少人用 2.Read committed(读已提交):相比于读未提交,这个隔离级别只能读到其他事物已经提交了的数据,这个隔离级别用得比较多。但是不是Mysql默认的隔离级别 3.Repeatable read(可重复读): 在读已提交隔离级别中,2次读取同一个变量如果其他事务修改了它的值,会读到的不一样。而在这个隔离级别中,顾名思义,一个事务开始读了。多次读到的值可以保证是一样的 4.Serializable 序列化 在这个隔离级别下,所有的事务都将串行操作,是隔离级别最高的也是效率最低的,很少人用 面试官追问:Innodb引擎默认隔离级别是哪个 答:可重复读 面试官追问:可重复读的实现原理 答:使用了MVCC多版本控制(类似乐观锁),Innodb引擎会给每一行数据加一个版本号信息,当一个事务修改一个数据时会增加它的版本号+1,当一个事务开始的时候会缓存下此时的版本号,后面读取的时候只会读取这个版本号的数据,因此别的事务提交了修改数据的版本号大于它,因此不会被读到 面试官追问:事务的隔离级别如何设置: 答:在Mysql命令行下调用命令 set global.tx_isolation,但这样Mysql重启失效,修改my.cnf来永久设置 面试官追问:可重读读有什么问题 答:会出现幻读,幻读是指事务读取到一个值无法准确继续后续操作。例如读取一个值,没有则插入,但是等插入的时候其他事务已经插入了,这就会导致插入失败,解决办法:sql语句显示加锁 :select xxxx for update,其他事务修改数据则会阻塞

Mysql Innodb引擎优化(参数篇)

   介绍

  InnoDB给MySQL提供了具有提交 回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎 InnoDB锁定在行级并且也在SELECT语句 提供一个Oracle风格一致的非锁定读 这些特色增加了多用户部署和性能 没有在InnoDB中扩大锁定的需要 因为在InnoDB中行级锁定适合非常 小的空间 InnoDB也支持FOREIGN KEY强制 在SQL查询中 你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来 甚至在同一个查询中也可以混合

   Innodb 的创始人 Heikki Tuuri

  Heikki Tuuri在Innodb的Bug社区里也是很活跃的 如果遇到Bug也可以直接提到社区 得到作者的解答

   为什么要学习Innodb的调优

  目前来说 InnoDB是为Mysql处理巨大数据量时的最大性能设计 它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的 在数据量大的网站或是应用中Innodb是倍受青睐的

  另一方面 在数据库的复制操作中Innodb也是能保证master和slave数据一致有一定的作用

  参数调优内容

   内存利用方面

   日志控制方面

   文件IO分配 空间占用方面

   其它相关参数

   1 内存利用方面

  首先介绍一个Innodb最重要的参数

  innodb_buffer_pool_size

  这个参数和MyISAM的key_buffer_size有相似之处 但也是有差别的 这个参数主要缓存innodb表的索引 数据 插入数据时的缓冲 为Innodb加速优化首要参数

  该参数分配内存的原则 这个参数默认分配只有 M 可以说是非常小的一个值 如果是一个专用DB服务器 那么他可以占到内存的 % % 这个参 数不能动态更改 所以分配需多考虑 分配过大 会使Swap占用过多 致使Mysql的查询特慢 如果你的数据比较小 那么可分配是你的数据大小+10% 左右做为这个参数的值 例如 数据大小为50M 那么给这个值分配innodb_buffer_pool_size=64M

  设置方法

  innodb_buffer_pool_size= G

  这个参数分配值的使用情况可以根据show innodb status\G;中的

  

  BUFFER POOL AND MEMORY

  

  Total memory allocated ;

  去确认使用情况

  第二个

  innodb_additional_mem_pool

  作用 用来存放Innodb的内部目录

  这个值不用分配太大 系统可以自动调 不用设置太高 通常比较大数据设置 M够用了 如果表比较多 可以适当的增大 如果这个值自动增加 会在error log有中显示的

  分配原则

  用show innodb status\G;去查看运行中的DB是什么状态(参考BUFFER POOL AND MEMORY段中) 然后可以调整到适当的值

  

  BUFFER POOL AND MEMORY

  

  Total memory allocated ; in additional pool allocated

  参考 in additional pool allocated

  根据你的参数情况 可以适当的调整

  设置方法

  innodb_additional_mem_pool= M

   2 关于日值方面

  innodb_log_file_size

  作用 指定日值的大小

  分配原则 几个日值成员大小加起来差不多和你的innodb_buffer_pool_size相等 上限为每个日值上限大小为 G 一般控制在几个LOG文件相加大小在2G以内为佳 具体情况还需要看你的事务大小 数据大小为依据

  说明 这个值分配的大小和数据库的写入速度 事务大小 异常重启后的恢复有很大的关系

  设置方法

  innodb_log_file_size= M

  innodb_log_files_in_group

  作用 指定你有几个日值组

  分配原则  一般我们可以用2-3个日值组 默认为两个

  设置方法

  innodb_log_files_in_group=

  innodb_log_buffer_size

  作用 事务在内存中的缓冲

  分配原则 控制在 M 这个值不用太多的 他里面的内存一般一秒钟写到磁盘一次 具体写入方式和你的事务提交方式有关 在Oracle等数据库了解这个 一般最大指定为3M比较合适

  参考 Innodb_os_log_written(show global status 可以拿到)

  如果这个值增长过快 可以适当的增加innodb_log_buffer_size

  另外如果你需要处理大理的TEXT 或是BLOB字段 可以考虑增加这个参数的值

  设置方法

  innodb_log_buffer_size= M

  innodb_flush_logs_at_trx_mit

  作用 控制事务的提交方式

  分配原则 这个参数只有3个值 0 1 2请确认一下自已能接受的级别 默认为1 主库请不要更改了

  性能更高的可以设置为0或是2 但会丢失一秒钟的事务

  说明

  这个参数的设置对Innodb的性能有很大的影响 所以在这里给多说明一下

  当这个值为 时 innodb 的事务LOG在每次提交后写入日值文件 并对日值做刷新到磁盘 这个可以做到不丢任何一个事务

  当这个值为 时 在每个提交 日志缓冲被写到文件 但不对日志文件做到磁盘操作的刷新 在对日志文件的刷新在值为 的情况也每秒发生一次 但需要注意的 是 由于进程调用方面的问题 并不能保证每秒100%的发生 从而在性能上是最快的 但操作系统崩溃或掉电才会删除最后一秒的事务

  当这个值为 时 日志缓冲每秒一次地被写到日志文件 并且对日志文件做到磁盘操作的刷新 但是在一个事务提交不做任何操作 mysqld进程的崩溃会删除崩溃前最后一秒的事务

  从以上分析 当这个值不为1时 可以取得较好的性能 但遇到异常会有损失 所以需要根据自已的情况去衡量

  设置方法

  innodb_flush_logs_at_trx_mit=

    文件IO分配 空间占用方面

  innodb_file_per_table

  作用 使每个Innodb的表 有自已独立的表空间 如删除文件后可以回收那部分空间

  分配原则 只有使用不使用 但DB还需要有一个公共的表空间

  设置方法

  innodb_file_per_table=

  innodb_file_io_threads

  作用 文件读写IO数 这个参数只在Windows上起作用 在LINUX上只会等于4

  设置方法

  innodb_file_io_threads=

  innodb_open_files

  作用 限制Innodb能打开的表的数据

  分配原则 如果库里的表特别多的情况 请增加这个 这个值默认是300

  设置方法

  innodb_open_files=

  请适当的增加table_cache

   其它相关参数

  这里说明一个比较重要的参数

  innodb_flush_method

  作用 Innodb和系统打交道的一个IO模型

  分配原则 Windows不用设置

  Unix可以设置 fsync() or O_SYNC/O_DSYNC

  如果系统可以禁止系统的Cache那就把他禁了

  Linux可以选择 O_DIRECT

  直接写入磁盘 禁止系统Cache了

  设置方法

  innodb_flush_method=O_DIRECT

  innodb_max_dirty_pages_pct

  作用 控制Innodb的脏页在缓冲中在那个百分比之下 值在范围 默认为

  这个参数的另一个用处 当Innodb的内存分配过大 致使Swap占用严重时 可以适当的减小调整这个值 使达到Swap空间释放出来 建义 这个值最大在90% 最小在15% 太大 缓存中每次更新需要致换数据页太多 太小 放的数据页太小 更新操作太慢

  设置方法

  innodb_max_dirty_pages_pct=

  动态更改需要有Super权限

  set global innodb_max_dirty_pages_pct= ;

   总结

lishixinzhi/Article/program/MySQL/201311/29325

如果你还想了解更多这方面的信息,记得收藏关注本站。

mysql引擎innodb(mysql5.7几的默认为innboob)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.