你可以在主 index.php 文件的顶部找到环境配置部分来更改此设置。 重要 如果发生错误,禁用错误报告将不会阻止日志的写入。...当异常被抛出时,系统将显示后面的错误模板 /application/views/errors/html/error_404.php。你应为你的站点自定义所有错误视图。...如果在 Config/Routes.php 中,你指定了404 的重写规则,那么它将代替标准的 404 页来被调用 if (!...ConfigException 当配置文件中的值无效或 class 类不是正确类型等情况时,请使用此异常 throw new \CodeIgniter\ConfigException(); 它将 HTTP...DatabaseException 当产生如连接不能建立或连接临时丢失的数据库错误时,请使用此异常 throw new \CodeIgniter\DatabaseException(); 它将 HTTP
讲解 本教程旨在向您介绍CodeIgniter框架和MVC体系结构的基本原理。它将向您展示如何以逐步的方式构造基本的CodeIgniter应用程序。 在本教程中,您将创建一个基本的新闻应用程序。...您将从编写可加载静态页面的代码开始。接下来,您将创建一个新闻部分,该部分将从数据库中读取新闻项。最后,您将添加一个表单以在数据库中创建新闻项。...$page, $data); echo view('Templates/Footer', $data); } 当请求的页面存在时,将给用户加载并展示出一个包含页头页脚的页面。...所以控制器中 $data['title'] 的值,就等于视图中 $title 的值。 路由 控制器已经开始工作了!...当获取到请求时,CodeIgniter 首先查找能匹配到的第一条规则,然后调用相应的可能存在参数的控制器和方法。 你可以在关于 URL路由的文档 中找到更多信息。
尽管 CodeIgniter 已经相当高效了,但是网页中的动态内容、主机的内存 CPU 和数据库读取速度等因素直接影响了网页的加载速度。...依靠网页缓存, 你的网页可以达到近乎静态网页的加载速度,因为程序的输出结果 已经保存下来了。 缓存是如何工作的? 可以针对到每个独立的页面进行缓存,并且你可以设置每个页面缓存的更新时间。...当页面第一次加载时,缓存将被写入到 application/cache 目录下的文件中去。 之后请求这个页面时,就可以直接从缓存文件中读取内容并输出到用户的浏览器。...开启缓存 将下面的代码放到任何一个控制器的方法内,你就可以开启缓存了: $this- output- cache($n); //其中 $n 是缓存更新的时间(单位分钟) 上面的代码可以放在方法的任何位置...》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 希望本文所述对大家基于CodeIgniter
「写操作」: 对于数据库中页的修改操作,首先修改在缓存池中的页,然后在以一定的频率刷新到磁盘,并不是每次页发生改变就刷新回磁盘,而是通过 checkpoint 的机制把页刷新回磁盘。...2、Lru 链表 Lru 链表用来管理已经读取的页,当数据库刚启动时,Lru 链表是空的,此时页也都放在 Free 列表中,当需要读取数据时,会从 Free 链表中申请一个页,把从放入到磁盘读取的数据放入到申请的页中...因此需要考虑把已经缓存的页从 Buffer pool 中删除一部分,进而需要考虑如何删除及删除哪些已经缓存的页。...问题:这些被修改的页面什么时候刷新到磁盘?以什么样的顺序刷新到磁盘? 最简单的做法就是每发生一次修改就立即同步到磁盘上对应的页上,但是频繁的往磁盘中写数据会严重的影响程序的性能。...并且在 Flush 链表中的脏页是根据 oldest_lsn(这个值表示这个页第一次被更改时的 lsn 号,对应值 oldest_modification,每个页头部记录)进行排序刷新到磁盘的,值越小表示要最先被刷新
完成 4) WAL日志量达到了触发checkpoint阈值 5) 周期性地进行checkpoint 6) 需要刷新所有脏页 checkpoint调优 ---- 如何设置调优checkpoint,设置正确的参数呢...数据库的后台进程在执行用户事务时,发生的数据更改是先写入缓冲池中,对应PostgreSQL就是shared buffers。...PostgreSQL的缓冲池一般设置为总内存的1/4左右,缓冲池里面的这些数据更改,在事务提交时,是无需同步写入到磁盘的。...首先是由background writer将shared buffers里面的被更改过的页面(即脏页),通过调用write写入操作系统page cache。...参考值:0.8≈0.9 checkpoint_flush_after 单位:BLCKSZ 当checkpointer process脏数据超过配置阈值时,触发调用OS sync_file_range
墨墨导读:Checkpoint是数据库中重要的概念,无论在Oracle,MySQL这个概念,它主要功能是在检查点时刻,脏数据全部刷新到磁盘,以实现数据的一致性和完整性。...完成 4) WAL日志量达到了触发checkpoint阈值 5) 周期性地进行checkpoint 6) 需要刷新所有脏页 checkpoint调优 ---- 如何设置调优checkpoint,设置正确的参数呢...数据库的后台进程在执行用户事务时,发生的数据更改是先写入缓冲池中,对应PostgreSQL就是shared buffers。...PostgreSQL的缓冲池一般设置为总内存的1/4左右,缓冲池里面的这些数据更改,在事务提交时,是无需同步写入到磁盘的。...首先是由background writer将shared buffers里面的被更改过的页面(即脏页),通过调用write写入操作系统page cache。
2、然后介绍了MySQL Update过程中发生了什么?Redo,Undo,双写之间如何配合,脏页何时刷新? 3、最后介绍了Crash Recovery时如何做恢复?...Redo"的意思是在必要时(如:崩溃恢复时)可以使用Redo Log中的数据来重新应用到InnoDB数据文件中,使得InnoDB能够恢复到一个一致性状态 Redo Log 是一个预写日志(WAL),是一种用于在数据库或数据库所在主机发生崩溃时确保数据完整性的技术...当一个页面的修改操作完成时,Redo Log Buffer将执行flush到Redo Log文件操作(但此时可能并未sync到磁盘) 根据WAL日志先行原则,buffer pool中的脏页被刷新到数据文件中之前...一个时间点,由一个LSN值(Checkpoint LSN)表示的整型值,在Checkpoint LSN之前的每个数据页(buffer pool中的脏页)的更改都已经落盘(刷新到数据文件中),Checkpoint...:持续的每次只刷新一部分脏页到磁盘,数据库正常运行过程中都是使用这种方式刷脏,在InnoDB内部还可细分为如下几种: ** Master线程每秒/每十秒固定执行Checkpoint ** LRU list
那么 MySQL 是如何保证一致性的呢?最简单的做法是在每次事务提交的时候,将该事务涉及修改的数据页全部刷新到磁盘中。...但是这么做会有严重的性能问题,主要体现在两个方面: 因为 Innodb 是以页为单位进行磁盘交互的,而一个事务很可能只修改一个数据页里面的几个字节,这个时候将完整的数据页刷到磁盘的话,太浪费资源了。...值为1,每次 commit 都会把 redo log 从 redo log buffer 写入到 system ,并 fsync 刷新到磁盘文件中。...值为0,表示事务提交时不进行写入 redo log 操作,这个操作仅在 master thread 中完成,而在 master thread 中每1秒进行一次重做日志的 fsync 操作,因此实例 crash...更改 redo log 及其 buffer 大小是需要重启数据库实例的,建议初始化时做好评估。可以适当加大 redo log 组数和大小,特别是你的数据库实例更新比较频繁的情况下。
网页缓存 CodeIgniter 可以让你通过缓存页面来达到更好的性能。...尽管 CodeIgniter 已经相当高效了,但是网页中的动态内容、主机的内存 CPU 和数据库读取速度等因素直接影响了网页的加载速度。...依靠网页缓存, 你的网页可以达到近乎静态网页的加载速度,因为程序的输出结果 已经保存下来了。 缓存是如何工作的? 可以针对到每个独立的页面进行缓存,并且你可以设置每个页面缓存的更新时间。...当页面第一次加载时,文件将会被当前的缓存引擎所配置的方式缓存起来(译者注:例如文件缓存,memcache缓存等)。 之后请求这个页面时,就可以直接从缓存文件中读取内容并输出到用户的浏览器。...如果缓存过期,会在输出之前被删除并重新刷新。 注解 基准标记没有缓存,所以当缓存启用时,仍然可以查看页面加载速度。
接上次文,当MONGODB 在操作时脏的数据块达到一定程度的情况下,就需要将这些数据转移到磁盘中,我们可以称之为驱逐。...,对wiredTiger引擎的配置进行更改,其中将驱逐的线程进行固化 4个, 并且触发脏页刷新的触发机制提前,这就类似于提高数据库的checkpoint 的频率。...其实徒劳的原因和下一个我们说的操作 CHECKPOINT 有关, 大量的数据写入到内存中,必须要找时间释放到磁盘上,将脏页刷新到磁盘,默认的刷新时间为60秒, 那么一个不好的checkpoint 会产生什么影响...这里会牵扯几个问题,1 多少信息保留在cache中 2 什么情况下会触发将内存的数据刷到我们的磁盘上,减少这些参数的情况下,可以提高刷新脏页的频度。...来查看当前的系统中的状态是如何的。
系统级LSN System LSN –表示分配给页面更改的最后一个原子集的LSN值,它是在任何给定时间点的数据库系统的最大LSN。...页面级LSN Page LSN–页的内存副本可能有多个更改,但这些更改不一定都要展现在磁盘上。存储在页头中的这个LSN表示页面更改到哪个LSN为止驻留在磁盘上。...WAL和检查点的过程使InnoDB能够从崩溃中恢复。在发生崩溃的情况下,InnoDB甚至在数据库启动之前就开始崩溃恢复过程,并在检查点LSN之后读取重做日志以获取更改。...跟踪 如何实际跟踪修改的页面呢?当页面刷新到磁盘时,跟踪是在IO层完成的。 当第一次启动页面跟踪时,启动请求时的系统LSN被标记为跟踪LSN。跟踪页面LSN小于跟踪LSN的所有刷新页面。...因为它们需要保留且不能丢失,这确保在检查点LSN刷新到磁盘之前,页面更改及其对应的页面条目在页面跟踪系统中是安全的,因此不会发生崩溃。
当二级索引列被更新时,旧的二级索引记录被删除标记,新记录被插入,并最终被删除标记记录被清除。 当二级索引记录被删除标记或二级索引页被更新的事务更新时,InnoDB在聚集索引中查找数据库记录。...可以控制何时发生后台刷新以及是否根据工作负载动态调整刷新速率。 可以配置如何InnoDB保留当前缓冲池状态以避免服务器重新启动后的长时间预热。...2、更改缓冲区 更改缓冲区是一种特殊的数据结构,当二级索引页不在缓冲池中时,它会缓存对二级索引页的 更改 。...在系统大部分空闲时或在缓慢关闭期间运行的清除操作会定期将更新的索引页写入磁盘。与将每个值立即写入磁盘相比,清除操作可以更有效地为一系列索引值写入磁盘块。 在内存中,更改缓冲区占据了缓冲池的一部分。...在磁盘上,更改缓冲区是系统表空间的一部分,当数据库服务器关闭时,索引更改会在其中缓冲。 更改缓冲区中缓存的数据类型由 innodb_change_buffering 变量控制。
在InnoDB存储引擎内部,有两种Checkpoint 分别为:Sharp Checkpoint、Fuzzy Checkpoint Sharp Checkpoint发生在数据库关闭时将所有的脏页都刷新回磁盘...故在InnoDB存储引擎内部使用Fuzzy Checkpoint进行页的刷新,即只刷新一部分脏页,而不是刷新所有的脏页回磁盘。...则: 当checkpoint_age 当async_water_mark...75表示,当缓冲池中���页的数量占据75%时,强制进行Checkpoint,刷新一部分的脏页到磁盘。..., 3)redo log buffer满的时候,没有可用buffer; 4)每秒刷新一次; 5)commit的时候; 6)数据库关闭时发生harp Checkpoint,触发将所有脏页刷回磁盘 7)手工
3、checkpoint 每次执行update、delete等语句更改记录时,缓冲池中的页与磁盘不一致,但是缓冲池的页不能频繁刷新到磁盘中(频率过大性能低),因此增加了write ahead log...当写入页时发生系统崩溃,恢复过程中,innodb从共享表空间的doublewrite找到该页的副本,并将其恢复到表空间文件中,再apply重做日志。...4.5 刷新临近页 InnoDB提供刷新临近页功能:当刷新一脏页时,同时检测所在区(extent)的所有页,如果有脏页则一并刷新,好处则是通过AIO特性合并写IO请求,缺点则是有些页不怎么脏也好被刷新,...而且频繁的更改那些不怎么脏的页又很快变成脏页,造成频繁刷新。...5、InnoDB的启动、关闭与恢复 5.1 innodb_fast_shutdown 该值影响数据库正常关闭时的行为,取值可以为0/1/2(默认为1): 【为0时】:关闭过程中需要完成所有的full purge
但是说道事务持久性,对于已提交的事务,但是在事务提交后发生了系统崩溃,这个数据的更改对于数据库也不能丢失。...但如果我们只在内存的buffer pool中修改了页面,假设事务提交后出现故障,导致内存里的数据都失效了,那么这个已提交的事务对数据库中所更改的也跟着丢失,但我们不能忍受的。...那么如何保证持久性呢,一个很简单的做法就是在事务提交完成之前,吧所有修改的页面刷新到磁盘上,但这样简单粗暴的做法有点问题: 刷新完整数据太浪费:有时候我们在页仅仅修改了一个字节,我们又知道innoDB是以页为单位来进行磁盘...当系统启动时,会将max row id属性加载到内存,将该值加上256之后赋值给我们前边提到的全局变量(因为在上次关机时该全局变量的值可能大于max row id属性值)。...(额外数据包含变长字段长度列表,null值列表,头部信息,后面就是真实数据,compact行如果发生数据存储溢出,真实数据列表会存储一部分真实数据,之后存储的就是指向页的页号,dynamic则在真实数据列表存储的全部都是指向页的页号
倘若每次一个页发生变化,就将新页的版本刷新到磁盘,那么这个开销是非常大的。并且,如果热点数据都集中在某几个页中,那么数据库的性能将变得非常差。...另外,如果在从缓冲池将页的新版本刷新到磁盘时发生了宕机,那么这个数据就不能恢复了。...2 中,而当 file 2 也被写满时,会再切换到 file 0 中。...针对上面这三点我们依次来解释下: 1)缩短数据库的恢复时间:当数据库发生宕机时,数据库不需要重做所有的日志,因为 Checkpoint 之前的页都已经刷新回磁盘。...但事实上,其实 redo log 中的数据并不是时时刻刻都是有用的,那些已经不再需要的部分就称为 ”可以被重用的部分“,即当数据库发生宕机时,数据库恢复操作不需要这部分的 redo log,因此这部分就可以被覆盖重用
像大多数数据库存储引擎一样,当您在 InnoDB 中更新一条数据时,更新是在内存中进行的,并且在命令实际返回之前,只会将修改的简短描述写入redo log文件。...缓冲池中涉及到变更操作的页面(或多个页面)被标记为脏页。随着您写入更多数据,脏页的数量会增加,并且在某些时候需要将它们写入磁盘。此过程发生在后台,称为刷新。...在繁忙的服务器上,当自适应刷新算法处于活动状态时,innodb_io_capacity_max 变量更为重要。一篇专门介绍 InnoDB 自适应刷新算法内部的博文正在准备中。...off 我们每次测试时都改变 innodb_io_capacity_max的值并计算 30 分钟内刷新页面的比率。...通常,SSD 在每个扇区中执行的写入操作比常规旋转驱动器要少得多。这一切都归结为使用与非门存储位的方式。这些位由一组栅极上的电压电平表示,并且当栅极在值之间循环时,栅极的最轻微劣化会影响这些电压电平。
,假设在事务提交后突然发生了某个故障,导致内存中的数据都失效了,那么这个已经提交了的事务对数据库中所做的更改也就跟着丢失了。...checkpoint checkpoint redo log 只是为了系统崩溃后恢复脏页用的,如果对应的脏页已经刷新到了磁盘(flush 链表中的更改已经落到了磁盘上),也就是说即使现在系统崩溃,那么在重启后也用不着使用...1也是innodb_flush_log_at_trx_commit的默认值。 2:当该系统变量值为2时,表示在事务提交时需要将redo日志写到操作系统的缓冲区中,但并不需要保证将日志真正的刷新到磁盘。...,就会将该变量的值刷新到系统表空间的页号为5的页面中一个称之为Max Trx ID的属性处,这个属性占用8个字节的存储空间 当系统下一次重新启动时,会将上边提到的Max Trx ID属性加载到内存中,将该值加上...undo log 的记录, 如果发生回滚就只对上一步进行回滚 将被删除记录从正常链表移动到垃圾链表中(备注: 当一个页被回收足够多的垃圾链表, 默认 50% 阈值会发生页合并) update undo
领取专属 10元无门槛券
手把手带您无忧上云