首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

fsync mysql_使用O_DIRECT_NO_FSYNC来提升MySQL性能

这是一个对性能和数据可靠性有较大影响的参数,在此拿出之前测试的一张性能对比图: 可以看到,该参数从fsync到O_DIRECT再到O_DIRECT_NO_FSYNC,性能分别有明显的提升。...一般在Linux下,我们会将该参数设置为O_DIRECT,即数据文件IO走direct_io模式,redo日志文件走系统缓存(linux page cache)模式,在IO完成后均使用fsync()进行持久化...而O_DIRECT_NO_FSYNC选项的意思是,使用O_DIRECT完成IO后,不调用fsync()刷盘。...因此,某些IO操作需要采用O_DIRECT模式,另一些IO操作可以采用O_DIRECT_NO_FSYNC模式。如果能够区分这些不同的IO操作类型,那么就可以提升IO性能。 这就是本文要说的内容。...先看下面一段话:O_DIRECT_NO_FSYNC: InnoDB uses O_DIRECT during flushing I/O, but skips the fsync() system call

45910
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL根据5.1.34之前版本的一个BUG分析O_DIRECT

140324 5:00:02 InnoDB: O_DIRECT is known to result in 'Invalid argument' on Linux on tmpfs, see MySQL...argument' on Linux on tmpfs, see MySQL Bug#26662 140324 5:00:02 InnoDB: Failed to set O_DIRECT on...有四个值:fdatasync,O_DSYNC,O_DIRECTO_DIRECT_NO_FSYNC 默认是fdatasync,调用fsync()去刷数据文件与redo log的buffer 为O_DSYNC...时,innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件 为O_DIRECT时,innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redo...log 为O_DIRECT_NO_FSYNC时,InnoDB存储引擎将依然使用O_DIRECT选项打开数据表空间文件,但是在刷新时,不再需要需要额外的fsync操作 首先文件的写操作包括三步:open

1.2K40

Linux O(n)调度器

前面我们学习了调度器的设计需要关注的几个点,在这里复习下: 吞吐量(对应的是CPU消耗型进程) 响应速度(对应的是IO消耗型进程) 公平性,确保每个进程都可以有机会运行到 移动设备的功耗 Linux中调度器的设计...实时进程采用两种调度策略SCHED_RR或者SCHED_FIFO 普通进程采用nice值进行动态调整普通进程的优先级 经常睡眠的进程尝试增大下优先级,经常长占CPU的适当减少优先级 本节我们先来学习Linux...早期的调度算法的设计,先从最早的调度器算法开始,此调度器时间复杂度是O(n),所以也可以称为O(n)调度算法。...我们选择的内核版本是linux-2.4.19。 O(n)调度器的实现原理 O(n)代表的是寻找一个合适的进程的时间复杂度。...总之O(n)调度器有很多问题,不过有问题肯定要解决的。所以在Linux2.6引入了O(1)的调度器。

3.3K20

谈谈调度 - Linux O(1)

约莫十五年前,当我刚刚开始参加工作时,赶上 Linux 发布划时代的 2.6 内核。在这个大家都翘首期盼的内核版本中,最令人兴奋的便是 O(1) scheduler。本文来谈谈这个算法是如何实现的。...2.4 scheduler 的问题 Linux 2.4 scheduler 支持 SMP(Symmetric Multi-Processing),然而,由于只用一个 global runqueue,各个...谈到搜索,大家第一反应是 hash table 是 O(1) 时间复杂度的。然而,它在最坏情况下是 O(N) 的。除此之外,没有任何算法能在最坏情况下 search 也是 O(1)。...linked list,stack,queue 在平均和最坏情况下都是 O(1),而大家脑海里的 hash table,同样的,虽然平均是 O(1),但最坏情况是 O(N)。...在其刚问世时,很多 linux 发行版就迫不及待将其移植回 2.4 kernel。而程序君整个职业生涯中接触过的一些调度器中,都能见到 bitarray + priority queue 的身影。

1.8K80

Linux O(1)调度器

O(n)调度器的种种问题,linux内核社区则在2.6内核版本引入了O(1)调度器,当然了引入的目的也正是要解决O(n)调度器面临的问题。...我们这片文章以Linux2.6.2版本来学习,在Linux内核文档中有一篇关于O(1)调度器的目的,如何设计的,以及实现有一个详细的介绍:sched-design.txt文档,有兴趣的可以去阅读。...从以上几点来看,可以看出O(1)的算法的改进都是针对O(n)算法存在的问题来修改的。...总结: O(1)调度器的引入主要是为了解决O(n)调度器的不足 O(1)调度器在赏罚机制上比O(n)调度器考虑的因素比较多,不再时像O(1)那样直接考时间片的大小来调度 但是O(n)和O(1)调度算法上核心还是通过判断一个进程的行为...如果去看O(1)调度器的实现,没有O(n)算法那么简单明了,O(1)中加了需要时间的判断,各种情况的考虑,导致代码的阅读性很差,读起来很费劲。

2.8K21

Direct exchange

Direct exchange介绍 我们希望将日志消息写入磁盘的程序仅接收严重错误(errros),而不存储哪些警告(warning)或信息(info)日志消息避免浪费磁盘空间。...Fanout这种交换类型并不能给我们带来很大的灵活性-它只能进行无意识的广播,在这里我们将使用direct这种类型来进行替换,这种类型的工作方式是,消息只去到它绑定的routingKey队列中去。...在上面这张图中,我们可以看到X绑定了两个队列,绑定类型是direct。队列Q1绑定键为orange,队列Q2绑定键有两个:一个绑定键为black,另一个绑定键为green....多重绑定 当然如果exchange的绑定类型是direct,但是它绑定的多个队列的key如果都相同,在这种情况下虽然绑定类型是direct但是它表现的就和fanout有点类似了,就跟广播差不多,如下图所示...; } } 消费者1: public class ReceiveLogsDirect01 { private static final String EXCHANG_NAME="direct_logs

25520

时间复杂度o(1), o(n), o(logn), o(nlogn)

1、时间复杂度o(1), o(n), o(logn), o(nlogn)。算法时间复杂度的时候有说o(1), o(n), o(logn), o(nlogn),这是算法的时空复杂度的表示。...O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。 2、时间复杂度为O(1)。...哈希算法就是典型的O(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到目标(不考虑冲突的话) 3、时间复杂度为O(n)。 就代表数据量增大几倍,耗时也增大几倍。 比如常见的遍历算法。...再比如时间复杂度O(n^2),就代表数据量增大n倍时,耗时增大n的平方倍,这是比线性更高的时间复杂度。 比如冒泡排序,就是典型的O(n^2)的算法,对n个数排序,需要扫描n×n次。...5、时间复杂度为O(nlogn)。 就是n乘以logn,当数据增大256倍时,耗时增大256*8=2048倍。这个复杂度高于线性低于平方。 归并排序就是O(nlogn)的时间复杂度。

1.3K10

Linux进程调度之 - O(1)调度算法

Linux是一个支持多任务的操作系统,而多个任务之间的切换是通过 调度器 来完成,调度器 使用不同的调度算法会有不同的效果。...Linux2.4版本使用的调度算法的时间复杂度为O(n),其主要原理是通过轮询所有可运行任务列表,然后挑选一个最合适的任务运行,所以其时间复杂度与可运行任务队列的长度成正比。...而Linux2.6开始替换成名为 O(1)调度算法,顾名思义,其时间复杂度为O(1)。...虽然在后面的版本开始使用 CFS调度算法(完全公平调度算法),但了解 O(1)调度算法 对学习Linux调度器还是有很大帮助的,所以本文主要介绍 O(1)调度算法 的原理与实现。...由于在 Linux 内核中,任务和进程是相同的概念,所以在本文混用了任务和进程这两个名词。

4.7K81

“去O”不如“减O

去IOE的话题最近很火,而来自四川电信的客户访问,其中有一段颇有借鉴意义:去“O”不如减“O”。...去O”不如“减O” - 在成功去掉小型机之后,TechTarget记者还向梁天健询问了关于去E(EMC存储)和去O(Oracle数据库)的话题。...再谈到去O,梁天健的态度很明确,从技术层面来讲,目前很多企业连Oracle这样具有高可用、高性能、易用性强的数据库都没有用好,去O根本无从谈起。...梁天健认为答案是否定的:“我们不去O,但是我们可以尝试减O。何谓‘减O’?就是将假设现在的200个独立的Oracle数据库整合到20个更大型的Oracle数据库中去。”...当然,“减O”同样具有风险,实施需谨慎。梁天健认为,以前一个系统出现故障,也就是影响这一个系统,但是整合在一起,一个系统的数据库占用了100%的I/O,会导致其它的系统也同样受到干扰。

1.8K60

O2O网站

O2O还有其它模式的有B2B.B2C.C2C。...的成分,也包含O2O以外的东西,完全可以称为采用O2O模式运营的网站非常少,美乐乐家居网算是比较典型的例证。...同城购是电子商务O2O(Online To Offline)模式的创新平台和大规模的应用平台,随着O2O模式的逐渐成熟和广泛应用,本地化电子商务必将成为电商服务争夺战的决胜之地。...对同城购来说,O2O模式可带来大规模高黏度的消费群体,进而能争取到更多的商家资源。 O2O模式作为线下商务与互联网结合的新模式,解决了传统行业的 电子商务化问题。...因此,团购让O2O模式发挥了淋漓尽致的效果。但团购是低折扣的临时性促销,甚至商家并没有真正参与到 电子商务运营中来,还不能说是完全的O2O模式。

67620

buffer io和direct io

通常来说,文件I/O可以分为两种: Buffer I/O Direct I/O Buffer I/O 缓存 I/O 使用了操作系统内核的页缓存,保护了磁盘 缓存 I/O 减少读盘的次数,...Direct I/O 凡是通过直接 I/O 方式进行数据传输,数据均直接在用户地址空间的缓冲区和磁盘之间直接进行传输,中间少了页缓存的支持。...Java 中目前是没有直接支持 Direct I/O的,只支持Buffer I/O。...我们可以通过JNA 来实现其支持,linux通过将O_DIRECT标志传递给 open()系统调用来实现对Direct I/O 的支持,不过直接操作磁盘,所有写入内存块数量必须是文件系统块大小的倍数,而且要与内存页大小对齐...开源的Jaydio是一个实现了对Direct I/O支持的Java I/O库。https://github.com/smacke/jaydio

34150

O0 O1 O2 O3优化原理

为了加快代码执行的效率,很多OJ平台都会自动开启O2优化。 在这里我们讲讲到底是怎么优化的。 O0优化 #pragma GCC optimize(0) 1、把变量分配到寄存器。...O1优化 #pragma GCC optimize(1) 包含O0的各种优化功能,并增加了: 1、在变量赋值时,将数值直接赋给变量而不是给出变量的地址。 2、去掉没有用的变量和表达式。...O2优化 #pragma GCC optimize(2) 包含O1的各种优化功能,并增加了: 1、去掉全局通用的子表达式。 2、去掉全局没有用的分配变量和表达式。 3、化解循环。...当只用-O选项时优化器自动进行-O2优化。 O3优化 #pragma GCC optimize(3) 包含O2的各种优化功能,并增加了: 1、去掉未调用的函数。 2、简化返回值未使用的函数。

26320

【转】算法中时间复杂度概括——o(1)、o(n)、o(logn)、o(nlogn)

在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度。这里进行归纳一下它们代表的含义:这是算法的时空复杂度的表示。...O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。 比如时间复杂度为O(n),就代表数据量增大几倍,耗时也增大几倍。比如常见的遍历算法。...再比如时间复杂度O(n^2),就代表数据量增大n倍时,耗时增大n的平方倍,这是比线性更高的时间复杂度。比如冒泡排序,就是典型的O(n^2)的算法,对n个数排序,需要扫描n×n次。...二分查找就是O(logn)的算法,每找一次排除一半的可能,256个数据中查找只要找8次就可以找到目标。 O(nlogn)同理,就是n乘以logn,当数据增大256倍时,耗时增大256*8=2048倍。...归并排序就是O(nlogn)的时间复杂度。 O(1)就是最低的时空复杂度了,也就是耗时/耗空间与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变。

1.2K10
领券