标签: performance

由于“客户端处理时间”很长,远程 SELECT 语句很慢,但本地速度很快

当连接到我们的生产服务器(SQL Server 2008,非常强大的机器)时,这个 SELECT 语句需要2 秒,吐回所有字段(总共 4 MB 数据)。

SELECT TOP (30000) *
FROM person
WITH(NOLOCK);
Run Code Online (Sandbox Code Playgroud)

从同一网络上的任何其他框(使用 SQL 身份验证或 Windows 身份验证连接),相同的查询需要1 分 8 秒

我正在使用这个非常简单的语句进行测试,以说明它不是索引问题或与查询相关的问题。(我们目前所有查询都存在性能问题......)

这些行成块出现,而不是一次全部出现。我立即得到我的第一行,然后等待超过 1 分钟让成批的行进来。

这是从远程框运行时查询的客户端统计信息:

Query Profile Statistics
  Number of INSERT, DELETE and UPDATE statements 0
  Rows affected by INSERT, DELETE, or UPDATE statements 0
  Number of SELECT statements  2
  Rows returned by SELECT statements 30001
  Number of transactions 0

Network Statistics
  Number of server roundtrips 3
  TDS packets sent …
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2008 remote

12
推荐指数
2
解决办法
1万
查看次数

将串行列添加到大表的最有效方法

将 BIGSERIAL 列添加到大表(约 3 Bil. 行,约 174Gb)的最快方法是什么?

编辑:

  • 我希望该列是现有行 ( NOT NULL) 的递增值。
  • 我没有设置填充因子(回想起来,这似乎是一个错误的决定)。
  • 我对磁盘空间没有问题,只是希望它尽可能快。

postgresql performance sequence update

12
推荐指数
1
解决办法
3万
查看次数

处理 CXPACKET 等待 - 设置并行成本阈值

作为我之前关于对 Sharepoint 站点进行性能故障排除的问题的后续问题,我想知道我是否可以对 CXPACKET 等待做些什么。

我知道下意识的解决方案是通过将 MAXDOP 设置为 1 来关闭所有并行性 - 听起来是个坏主意。但另一个想法是在并行开始之前增加成本阈值。执行计划成本的默认值 5 相当低。

所以我想知道是否已经写了一个查询,可以找到执行计划成本最高的查询(我知道你可以找到那些执行持续时间最长的查询等等 - 但是执行计划成本是否可以在某处检索,也是?),这也会告诉我这样的查询是否已并行执行。

有没有人手头有这样的脚本,或者可以向我指出相关的 DMV、DMF 或其他系统目录视图的方向以找出这一点?

performance sql-server-2008 parallelism query-performance performance-tuning

12
推荐指数
1
解决办法
3028
查看次数

将事务日志放在单独的卷 [固态] 上?

事务日志通常隔离在单独的卷上。据我所知,这种做法的基本原理是事务日志的数据是按顺序写入的——与随机相比,硬盘驱动器可以以更快的速度顺序执行写入操作。这是由于驱动器内的小针在写入连续数据块时必须移动更短的距离,而不是随机写入。

(对不起,我的解释很幼稚。只是想弄明白我读过的东西。)

考虑到这一点......我突然想到固态驱动器没有小针和盘片以及在它们内部移动的东西。如果我的数据库和事务日志都位于由八个固态驱动器组成的单个 RAID 5 上,那么将事务日志移动到它自己的单独卷上真的有什么好处吗?如果所谓的效率提升是基于顺序写入减少针移动和盘片旋转的距离的前提,而固态驱动器没有这些移动部件,那么通过隔离日志我能得到什么?

performance

12
推荐指数
1
解决办法
6245
查看次数

大内存环境中的 SQL Server TempDB 行为

读完这个问题让我想起了我不久前的一个问题。

我们有一个具有 512GB RAM 的 SQL Server,主数据库是 450GB。我们在 TempDB 中看到了很多动作(好吧,我认为这是“相当多的动作”——可能不是!)。我安装了 RamDisk Plus Server 的演示版,创建了一个 50GB 的 ramdrive,将 TempDB 指向它,但并没有看到性能有任何改善。

写入 TempDB 是否总是导致对磁盘的实际物理写入,或者 TempDB 写入是否由 SQL Server 缓存以便像在 Windows 文件系统缓存中那样延迟写入?

在这种情况下,ramdisk 毫无意义吗?

我知道 SQL Server 6.5 支持 TempDB-In-Ram,但我看到它很久以前就停产了!

performance sql-server-2005 sql-server tempdb

12
推荐指数
1
解决办法
5864
查看次数

使用复杂标准最小化索引读取

我正在优化工作票的 Firebird 2.5 数据库。它们存储在一个声明如下的表中:

CREATE TABLE TICKETS (
  TICKET_ID id PRIMARY KEY,
  JOB_ID id,
  ACTION_ID id,
  STATUS str256 DEFAULT 'Pending'
);
Run Code Online (Sandbox Code Playgroud)

我通常想找到第一张尚未处理且处于Pending状态的票证。

我的处理循环是:

  1. 取回第一张票在哪里 Pending
  2. 使用 Ticket 工作。
  3. 更新工单状态 => Complete
  4. 重复。

没有什么太花哨的。如果我在这个循环运行时观察数据库,我会看到每次迭代的索引读取次数增加。据我所知,性能似乎并没有严重下降,但是我正在测试的机器非常快。但是,我从我的一些用户那里收到了性能随时间下降的报告。

我在 上有一个索引Status,但它似乎仍然在Ticket_Id每次迭代时向下扫描列。好像我忽略了一些东西,但我不确定是什么。像这种预期的索引读取次数是否会不断攀升,还是索引在某些方面表现不佳?

-- 编辑评论 --

在 Firebird 中,您可以限制行检索,例如:

Select First 1
  Job_ID, Ticket_Id
From
  Tickets
Where
  Status = 'Pending'
Run Code Online (Sandbox Code Playgroud)

因此,当我说“第一”时,我只是要求它提供一个有限的记录集,其中Status = 'Pending'.

performance index firebird

12
推荐指数
1
解决办法
516
查看次数

我应该在截断/大插入后重建索引吗?

我有一个存储过程,在插入新数据(基于其他表中的数据、计算等)之前,它会截断一些包含大约 1.75M 行的表。

基本大纲很简​​单:

  • 截断表
  • 以每次大约 75,000 的“批次”插入 1.75M 行。

我想知道我是否应该在此过程中的任何时候明确重新构建索引?例如

  • 截断表
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西]
  • 插入 175 万行

也许

  • ALTER INDEX ALL ON xxx DISABLE
  • 截断表
  • 插入 175 万行
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西]

感谢任何帮助......不是 DBA - 非常了解 DB 的开发人员更准确!

performance index sql-server

12
推荐指数
1
解决办法
2万
查看次数

PostgreSQL 顺序扫描而不是索引扫描 为什么?

大家好 我的 PostgreSQL 数据库查询有问题,想知道是否有人可以提供帮助。在某些情况下,我的查询似乎忽略了我创建的用于连接两个表datadata_area. 发生这种情况时,它使用顺序扫描并导致查询速度慢得多。

顺序扫描(~5 分钟)

Unique  (cost=15368261.82..15369053.96 rows=200 width=1942) (actual time=301266.832..301346.936 rows=153812 loops=1)
   CTE data
     ->  Bitmap Heap Scan on data  (cost=6086.77..610089.54 rows=321976 width=297) (actual time=26.286..197.625 rows=335130 loops=1)
           Recheck Cond: (datasetid = 1)
           Filter: ((readingdatetime >= '1920-01-01 00:00:00'::timestamp without time zone) AND (readingdatetime <= '2013-03-11 00:00:00'::timestamp without time zone) AND (depth >= 0::double precision) AND (depth <= 99999::double precision))
           ->  Bitmap Index Scan on data_datasetid_index  (cost=0.00..6006.27 rows=324789 width=0) (actual time=25.462..25.462 rows=335130 loops=1)
                 Index Cond: …
Run Code Online (Sandbox Code Playgroud)

postgresql performance execution-plan query-performance

12
推荐指数
1
解决办法
2万
查看次数

过多的空闲连接会影响 PostgreSQL 9.2 的性能吗?

我的数据库服务器上的一些查询似乎需要很长时间才能响应,而且我认为 CPU 使用率很高。运行时ps aux,我看到大约 250 个“空闲”连接(我认为太多了)。我还没有开始做一个完整的诊断,但我想知道这是否是一个开始寻找的好地方。

我还将 PgBouncer 与事务级池一起使用。我怀疑我可以idle通过调整池大小轻松减少连接数。但是,除非有充分的理由,否则我不想开始做太多更改。

idlePostgreSQL 9.2 中的很多连接会影响性能吗?

非常感谢!

postgresql performance database-design query-performance

12
推荐指数
1
解决办法
2万
查看次数

链接服务器风险

我正在实施一项新功能,该功能需要来自多台服务器上的数据库的数据。我只需要合并来自所有这些服务器的数据并对其进行排序。想到的两个选项是:

  1. 使用链接服务器并编写一个简单的查询来合并和排序将从一台服务器运行并从其他服务器收集数据的数据。

  2. 使用应用程序从所有服务器收集数据,并将其发送回 SQL Server 进行排序(不想在应用程序中实现排序)。

我们在 SQL Server 2008 r2 的主动/主动集群中运行我们的服务器。所有数据库都具有相同的权限,如果您有权访问一个数据库/服务器,则您对它们都有权限。这是一个面向公众的应用程序(需要用户登录)。

使用链接服务器有哪些风险?是否有任何我应该关注的安全漏洞?在主动/主动集群中运行链接服务器是否有任何问题?与替代方案相比,是否存在任何重大的性能问题?

关于链接服务器似乎有普遍的负面“嗡嗡声”,但我找不到任何具体的东西让我相信那里有任何真正的担忧。

performance sql-server-2008 security sql-server linked-server

12
推荐指数
2
解决办法
1万
查看次数