【发布时间】:2015-09-10 08:38:10
【问题描述】:
我使用的是 PostgreSQL 9.4。
首先,我在只有一个ssd-drive 的系统上安装了postgreSQL。
我试图了解什么是顺序读取,但最终遇到了一些问题。例如,如果我们要求 SQL-Server 给我们一些未索引的数据,则可能会发生 seq-scan。但是如果两个不同的客户端同时从两个不同的表中请求数据呢?在这种情况下,sql-server 为每个客户端创建两个不同的进程并同时执行查询。
但是如果查询是并发执行的,驱动器的头部需要从第一个表存储的区域跳转到第二个存储的区域。
所以,我们实际上没有顺序读取,在表的区域之间跳转。我在哪里穿?就不能稍微解释一下吗?
【问题讨论】:
-
@user2864740 嗯,是的,但我不考虑这种情况......如果服务器刚刚运行,我们所有的缓存都是空的。
-
"它可能已经在缓冲区中" --- 公平地说,在大多数情况下,数据只从文件系统缓存中读取。
-
@zerkms 你的意思是计划者公开为
shared hits?但是我们不能假设整张桌子都在里面。这就是我所知道的。所以,堆读取无论如何都会发生。 -
即使是冷启动,大多数应用程序也不会直接从存储设备中读取,而是仅从缓存中读取。这意味着内核首先将数据加载到缓存中,然后您的应用程序从那里读取它。把它想象成一个通读缓存。
-
您的问题是关于 MS SQL Server,但您将其标记为 PostgreSQL。哪一个? PostgreSQL 和 MS SQL 使用完全不同的方法进行磁盘访问 AFAIK。
标签: sql postgresql sequential scanning