-1

我有一个相同长度的本地和生产服务器上的 sql。当我在本地测试 sql 时,运行大约需要 2 秒,当我在生产或服务器上运行相同的东西时,运行大约需要 7 秒。

为什么差别这么大?

4

2 回答 2

0

导致 SQL 响应时间变化的主要因素(尤其是在连续运行几次相同的查询时)是缓存。实际上,可能同时有几个缓存效果在起作用:

  1. 代码缓存(下次您发出相同的查询时,您不必进行硬解析——节省时间和资源)
  2. 数据缓存,首先是
    a) 数据库级缓存(使用缓冲区缓存)
    ,还有
    b) 操作系统级缓存
    ,甚至
    c) 硬件级缓存

您可以通过启用自动跟踪并分析其输出来确定到底发生了什么。如果您第一次看到很多递归调用,而随后没有(或更少),这会告诉您代码缓存(光标共享会阻止您每次解析)。如果您第一次看到大量物理读取,但随后却少得多,那么就是数据库缓冲区缓存在起作用。如果物理读取的数量保持不变,但经过的时间发生了变化,那么它可能是低级数据缓存(操作系统或硬件)。

当然,还有其他因素可能会影响经过的时间——例如数据库工作量——但如果您在短时间内观察到这一点,那么可能不是这些因素。

于 2013-08-03T00:28:14.503 回答
0

还有两种方法可以解决这个问题,您所做的是通过缓存表运行 proc,这将使其更快,或者只是对其进行索引

于 2013-08-07T16:37:55.817 回答