我真的很困惑QEMU / KVM的行为。 我有一个服务器 – 大约100GB内存,2个CPU-6核心+ HT和三个硬盘 – 一个用于root,另外两个用于虚拟机的BTRFS镜像(如果有问题的话,则是HGST HDN724030ALE640)。 操作系统 – Debian 9.1,QEMU(磁盘types – 原始,IO本地)。
所以,服务器是空闲的 – 它只运行一个虚拟机。 这个虚拟机(Debian 9.1,16GB RAM,4 VCPU),运行PostgreSQL和MySQL数据库。 查询只接收一个 – PostgreSQL(每秒插入很less)。 而且…花费很多时间来做这个插入。 我写了一个简单的脚本,它将数据插入非常简单的表中,删除任何约束或索引(三个varchar字段)。 脚本性能 – 每秒大约1-2次插入。 这非常慢!
起初,我认为这是Postgres的麻烦。 但我重写了我的MySQL脚本,并显示相同的结果。 然后,我在FreeBSD上创build新的VM,安装PostgreSQL,从Linux VM创build相同的数据库和表,并再次检查性能 – 每秒插入1-2次。
好的。 让我们看看iostat和iotop。 iotop显示,为我的插入查询服务的Postgres进程在虚拟机上消耗了大约60-70%的IO(用于简单插入!)。 iostat -x说,现在在虚拟机上使用大约40-45次写入/秒,而在主机上使用大约80-90瓦特/秒。
我试图用dd实用程序来评估写入速度,如下所示:
dd if=/dev/urandom of=/tmp/fooo.bar bs=1M count=1000
它大约完成5-6秒。
接下来,脚本执行大约100个插入,我检查
/proc/[Postgres_PID]/io file: rchar: 138544 wchar: 114689 syscr: 39 syscw: 15 read_bytes: 0 write_bytes: 540672 cancelled_write_bytes: 0
我做错了什么? 为什么我的磁盘性能如此之慢?