Jav*_*cia 20 mysql postgresql testing
我是 DBA 新手,我有使用 Microsoft SQL Server 的经验,但我想跳到 FLOSS。
我正在创办一家公司,我们开发了一个带有 Postgres 后端的应用程序 (PHP),我们也做了一些与 MySQL 进行比较的测试。我们观察到 MySQL 的速度是 PostgreSQL 的两倍。
我做了一个有形的性能测试:
我究竟做错了什么?
PS:我阅读了许多关于数据库引擎性能调优的“howtos”。
PS(2):我们在 MySQL 数据库上使用 InnoDB(每个表一个文件)。
嗨垫!
我做了三个常见的选择(和最难的)查询。
关于磁盘的问题,当然不一样;在 Postgres 中,它是一个 SSD(快了几乎三倍)。
MySQL缓存数据:
+------------------------------+----------------------+
| Variable_name | Value |
+------------------------------+----------------------+
| binlog_cache_size | 32768 |
| have_query_cache | YES |
| key_cache_age_threshold | 300 |
| key_cache_block_size | 1024 |
| key_cache_division_limit | 100 |
| max_binlog_cache_size | 18446744073709547520 |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 16777216 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
| table_definition_cache | 256 |
| table_open_cache | 64 |
| thread_cache_size | 8 |
+------------------------------+----------------------+
Run Code Online (Sandbox Code Playgroud)
我不知道如何在 PostgreSQL 中查看它。
提前致谢。
Chr*_*ers 44
MySQL 和 PostgreSQL 在性能方面存在很大差异。InnoDB 和 PostgreSQL 表针对不同类型的查询进行了优化。了解这些差异对于了解如何从中获得良好性能非常重要。
举个例子,让我们看看最明显的区别。
PostgreSQL 与 MySQL/InnoDB 表结构及其对性能的影响
一般来说,在复杂的工作负载上,PostgreSQL 会更快,但在简单的主键查找上,MySQL 和 InnoDB 会更快。
PostgreSQL 表是堆表。没有选项可以构建一个不是堆表的表。该cluster命令只是重写按指定索引排序的堆。然后索引为具有各种值的元组提供堆位置。索引不能按物理顺序遍历,只能按逻辑顺序遍历,因此它们具有大量随机磁盘 I/O,而顺序读取表通常意味着大量顺序磁盘 I/O,因为您可以按物理顺序读取表。顺序磁盘 I/O 可以使用预读缓存和其他一些操作系统级优化。
这意味着,如果您需要大部分记录或超过几页,通常只从磁盘读取页会更快。另一方面,表的主键查找需要点击索引,查找文件中的位置,然后点击堆表并拉出记录。这意味着许多随机磁盘 I/O。
InnoDB 使用不同的方法。使用 InnoDB,该表是一个 b 树索引,索引负载中包含实际数据。这意味着主键查找已经可以从叶页中提取数据,因此需要更少的随机磁盘 I/O。同时,索引扫描需要遍历两个索引而不是一个索引,这意味着使用主键以外的任何索引最终都会变慢,而顺序扫描仍然更慢。
在 PostgreSQL 中获得诊断
我想你想使用类似的东西:
EXPLAIN (analyse, buffers, verbose)
[query];
Run Code Online (Sandbox Code Playgroud)
这将为您提供查询计划、初始估计、实际时间、缓冲区使用情况等等。
| 归档时间: |
|
| 查看次数: |
45897 次 |
| 最近记录: |