【问题标题】:Is sequential disk read actually sequential?顺序磁盘读取实际上是顺序的吗?
【发布时间】: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


【解决方案1】:

“顺序扫描”是指一个表从头到尾逐行读取。就如何从物理存储中读取数据而言,这没有任何意义。

所以这个术语是关于逻辑读取的。

不确定答案是否需要更多解释。

【讨论】:

  • 好吧,我认为顺序扫描和随机块读取这两个术语与应用于磁盘的术语密切相关。 IE。我推测,但不确定,SQL-server 按顺序将每个表的数据逐块存储在磁盘中。
  • @St.Antario “SQL 服务器按顺序将每个表的数据逐块存储在磁盘中。” --- 为什么你认为这些块是一个接一个物理组织的?
  • 因为它可能使读取操作更优化,同时按顺序而不是随机执行。但就像我已经说过的,我不确定。
  • @St.Antario 从应用程序逻辑的角度来看不是随机的,而是从访问模式来看。当您需要检索“中间元素”时(如在二进制搜索中) - 您对结构的第 N 个元素执行随机访问。
  • @St.Antario 完全忘记了存储。
猜你喜欢
  • 2013-04-15
  • 2016-12-13
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多