问题标签 [disk-io]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - I/O 延迟会导致简单的 UPDATE 在 MySQL 中花费几秒钟吗?
我的 MySQL 应用程序在运行一些,和查询时遇到性能下降的问题。在这个问题中,我将只讨论一个特定的 ,因为它足以证明问题:UPDATE
INSERT
DELETE
UPDATE
这UPDATE
通常足够快,大约 0.2 毫秒,但时不时地(足以成为问题)需要几秒钟。这是日志的摘录(查看第 4 行):
projects
是一个 InnoDB 表,有 6 列类型INT
和VARCHAR
17 行和一个索引id
。它也发生在其他桌子上,但在这里我专注于这张桌子。在尝试解决问题时,我确保查询都是顺序的,所以这不是锁定问题。UPDATE
以上是在事务的上下文中执行的。服务器上的其他信息:
- 具有 4GB RAM(原为 1GB)、12GB 可用磁盘空间的 VPS
- CentOS 5.8(原为 5.7)
- MySQL 5.5.10(原为 5.0.x)
上面的“是”位表示它在升级之前或之后都不起作用。
到目前为止我已经尝试过,但无济于事:
- 设置
innodb_flush_log_at_trx_commit
为 0、1 或 2 - 设置
innodb_locks_unsafe_for_binlog
开启或关闭 - 设置
timed_mutexes
开启或关闭 innodb_flush_method
从默认更改为O_DSYNC
或O_DIRECT
- 从默认增加到600M
innodb_buffer_pool_size
再增加到 3000M innodb_log_file_size
从默认增加到128M- 从源代码编译 MySQL
- Running
SHOW PROCESSLIST
,它告诉我状态正在“更新” - Running
SHOW PROFILE ALL
,表示几乎所有时间都花在“更新”上,并且在该步骤中,没有太多时间花在 CPU 周期上,并且有很多自愿的上下文切换(比如 30 次) - 监控.
SHOW STATUS
_Innodb_buffer_pool_pages_dirty
被刷新的脏页和慢查询之间可能存在一些关系,但相关性并不清楚。
然后我决定用 . 检查系统的 I/O 延迟ioping
。这是我的第一个 VPS,所以看到这个结果我很惊讶:
相当不稳定,我会说。
说了这么多,我问:
I/O 延迟是否会偶尔影响 MySQL 的性能?我一直认为,当您运行 时
UPDATE
,处理该连接的线程不会将数据刷新到磁盘或等待这样的刷新;它会立即返回,并且刷新将由另一个线程在另一个时间完成。如果它不能是磁盘 I/O,除了租用专用服务器之外,我还有什么可以尝试的吗?
c# - 优化输出字典
我有 4 个字典,其中包含 800k 字符串,包含 200 到 6000 个字符。当我将它加载到内存中时,它会占用大约 11 GB 的内存。解析数据需要 2 分钟,输出数据需要 2 分钟。有没有比我在下面使用的更快地输出数据?我每秒只能获得 20-31 MB 的磁盘 IO,而且我知道硬盘驱动器可以做 800ish
c# - 最终 System.UnauthorizedAccessException:访问路径...被拒绝
我有一个简单的 C# 控制台程序,它调用如下所示的函数:
在某些 Win 7 机器上,此函数最终会引发异常(当 i 超过 100,000 时):
这些机器安装了 McAfee 代理和 Cisco 安全代理以及许多其他软件。Windows Defender 被禁用。该程序正在管理员控制台中运行。该程序是为 .net 3.5 编译的。这是我在 W2k3 或 XP 机器上没有看到的。
如果我使用 procmon 来监视正在访问创建和删除“Temp\sample.txt”文件夹的所有事件和进程,我看到除了测试应用程序之外没有其他进程正在访问该路径。即使出现异常,procmon 中也没有列出其他进程。所以我不能证明这是杀毒软件的错。
有人知道可能出了什么问题吗?我是否在 Win7 上的 .net 中发现了一个错误;)
谢谢!
filesystems - 是否有可用的开源云文件系统?
我当前的项目需要一个云文件系统(确切地说是一个云 FTP)。
有没有可用的开源实现?如果是的话,请你给我一些参考。如果有一些与实施相关的技术报告,那就再好不过了:)
由于我还没有找到一个,我正在考虑从头开始实施一个。然后我又出现了一个问题:类似于本地文件系统,block
我认为最好引入基本存储单元的概念,以减少Internet上小对象传输的开销。那么如何在传输成本和云存储使用量之间做出折衷,在本地 fs 场景下,如果块大小太大,磁盘使用量会急剧下降?我应该设置多大的块大小?
我向一位资深人士寻求上述权衡,他建议可以使用可变块大小。然后我很好奇为什么像 minix 或 ext3 这样的经典文件系统不采用这种策略(如果我犯了错误,请纠正我)?
c# - UNC 路径不适用于 .NET?
我正在运行一个非常简单的程序,它试图在同一台机器上的一个文件夹中列出文件,该文件使用 UNC 格式指定(如http://msdn.microsoft.com/en-us/library/windows/中所述桌面/aa365247%28v=vs.85%29.aspx):
但是 Directory.GetFiles() 不起作用并抛出 ArgumentException(当 - path 是零长度字符串、仅包含空格或包含一个或多个由 InvalidPathChars 定义的无效字符时抛出)。Console.Writeline() 不打印任何内容,这确认路径中没有无效字符。当我使用“\\UNC\?\d:\share\input”或“\\UNC\?\machinename\share\input”或“\\?\machinename\share\input”时,我得到了同样的异常。
"d:\share\input" 确实是一个共享文件夹。
有谁知道可能出了什么问题?
谢谢!
linux - 如何在 Linux 上安全且事务性地替换文件?
我能想到的最天真、最糟糕的替换文件内容的方法是:
显然,如果该操作在关闭前的某个时间点失败,则您会丢失原始文件的内容,而不必完成新内容。
那么,什么是完全正确的方法(如果有的话)。我想它是这样的:
但这完全是原子的和安全的吗?实际执行移动的正确命令是什么。如果我有另一个打开连接的进程,file.txt
我假设它会保留指向原始文件的指针,直到关闭。如果另一个进程试图file.txt
在移动过程中打开怎么办?
我真的不在乎我的进程得到什么版本的文件,只要它们得到一个完整的、未损坏的版本。
c - 是否可以从多个线程写入同一文件的不同部分?
我可以从多个线程(在典型的 PC 上)同时写入同一文件的不同部分吗?我的意思是只有一个磁头,所以写入只能以某种顺序执行,即不能并行,对吧?
编辑:
我正在编写一个对大型二进制文件进行排序的程序,但大部分时间仍然花在磁盘 I/O 上,所以我只是想知道通过并行执行 I/O 是否会获得额外的速度。
c# - TextWriter 没有写入磁盘,没有错误
我有以下代码片段,它从列表中获取行并将它们写入磁盘:
但是......结果文件不是在磁盘上创建的,也没有抛出任何异常。就像要写入磁盘的文本消失在空气中一样。此代码在另一个程序集中工作,而不是在我将其移植到的服务中。我不知道为什么在这种情况下文本不会写入磁盘,非常感谢您为解决此问题提供的任何帮助。
java - 性能:BufferedOutputStream 与 FileWriter
我一直使用 aFileWriter
在 Java 中将文本写入文件。显然你也可以使用 a BufferedOutputStream
。在仔细阅读了两个 javadocs 之后,我似乎无法分辨哪个更快/更有效。
所以我问:这两种文件 I/O 方法之间是否存在性能差异(即使是最小的)?如果是这样,它们是什么,为什么?如果不是,为什么它们实际上是相同的?
是否存在其中一种优于另一种的情况?提前致谢!