标签: performance-tuning

Tempdb 文件在同一驱动器上是固态的?

我们目前在固态驱动器上有 tempdb(8 个文件)。

我们知道建议主 mdf 和事务日志 ndf 位于不同的驱动器上,以减少争用。tempdb 文件应该在不同的驱动器上以保持一致的原则,还是可以都在同一个驱动器上?

以下文章指出它们都在同一个驱动器上,但正在寻找背景技术解释。 对多个 tempdb 文件的建议

ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev2', FILENAME = N'G:\tempdb2.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev3', FILENAME = N'G:\tempdb3.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
....
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2012 tempdb performance-tuning

0
推荐指数
1
解决办法
597
查看次数

UPDATE触发器导致死锁

我有一个 After Update 触发器,其中触发器在同一个表中插入一个值以查找持续时间列。我的目标是每当插入 end_time 值时,触发器将找到hh:mm:ss格式的持续时间并插入到持续时间列中。

问题-触发器导致如此多的死锁,从而阻塞了另一个进程。

列数据类型信息..

Start_time datetime, End_time datetime, Duration time(3)

ALTER TRIGGER [dbo].[GET_DURATION] ON [dbo].[INBOUND_CALL_xxx]
AFTER UPDATE AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Begin Transaction

               UPDATE INBOUND_CALL_xxx
               SET DURATION = convert(time(0),(END_TIME- START_TIME))                                                     
               FROM INBOUND_CALL_xxx with (nolock)
Commit;
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2008 sql-server sql-server-2012 performance-tuning

0
推荐指数
1
解决办法
3842
查看次数

预生产的索引列?

如果我理解正确,索引一列会提高 SELECT 速度,但会降低 INSERT 速度。

假设您的应用程序是新的,并且您已经确定了适合编制索引的列(基于您查看视图的方式,例如 WHERE / JOINS)。

您是否必须在发现性能问题之前立即索引这些列?或者稍后再做这些操作而不影响 INSERT 是否有意义?

mysql performance optimization query-performance performance-tuning

0
推荐指数
1
解决办法
43
查看次数

MongoDB - 复制 Oplog 窗口已低于 1 小时

我正在使用 MongoDB Atlas,我有一个 3 个集群,具有 M30 和 100gb 的存储空间。

我当前的用例如下: - 用户在我的平台中分派一个搜索 - 平台将此搜索分派给其他提供商 (12) - 对于此搜索,每个提供商获得 2k 份文档

对于配置,我在 3 个副本集集群(M30 = 8 GB RAM • 100 GB 存储)中使用 Mongodb Atlas。我还有一个 TTL 索引,用于根据每个文档中的日期字段 (searchStartedAt) 使我用来在 10 分钟后删除文档的唯一数据库/集合中的文档过期。

我试图理解的是我收到的这个警报(“复制操作日志窗口已经低于 1 小时”),如果我做对了,主节点可以在从节点失去同步之前继续接收数据多长时间。

我想检查一下我的理解是否正确,是否有任何调整可以避免这种情况。

有人可以给我一个提示吗?如果任何其他信息可以对此提供帮助,请告诉我,我会更新问题。

非常感谢您提供有关它的任何提示。

mongodb alerts mongodb-atlas mongodb-4.2 performance-tuning

0
推荐指数
1
解决办法
3808
查看次数

如何微调一个巨大的有问题的堆表?

问题:

一个巨大的表导致了一个非常重要的生产数据库(MS SQL Server 2016 SP1 标准版)上的严重性能问题。

关于有问题的表的事实:

  • 没有索引的堆表。
  • 450 GB 大小。
  • 超过 1.9 亿条记录。
  • 每次执行简单的 SELECT 查询时,物理 I/O 活动都超过 900 MB/s。如果查询包含 WHERE 子句,则最糟糕。
  • 在此表上执行的查询会导致应用程序 UI 延迟 4-5 分钟。

应用程序/系统制造商建议的解决方案:

  • 将堆表转换为聚集索引表。

与建议解决方案相关的建议性能调整步骤:

  • 截断 db 表(与客户同意删除超过 1 年的记录)。
    • 不要删除记录。将过去 1 年中创建的记录复制到临时表。截断原始表,然后将您从临时表复制的记录插入到清空的原始表中。
  • 对 db 表进行碎片整理。
  • 将 db 表从堆迁移到聚簇表。
  • 创建聚集索引。
  • 创建维护作业并安排它定期重新构建聚集索引。

我对社区的问题:

您将如何提高这种有问题的表的性能?您会在建议的性能调整步骤中添加或删除哪些内容?

非常感谢并提前感谢。

从这里开始编辑:

好的,我不想一一回复所有评论。所以我正在编辑问题并添加更多信息。

第一:我不是专家 DBA。我会说一个高级初学者。这就是为什么我在这里尽可能多地向社区学习。

第二:我们两周前才得到这个客户,我自己还没有完全访问环境。这个关于问题的信息(事实),关于表直接来自客户的系统管理员。

第三:因此,我不知道为什么该表是堆的第一手,没有索引,他们让它在没有任何分区的情况下增长这么多,等等。

第四:建议的解决方案和建议的步骤不是我自己的,而是直接来自整个系统的制造商(这是一个众所周知的统一通信系统,制造商在这方面是最好的。我想你们都知道哪个)。

5th:我希望下周可以完全访问环境,在此之前我只是想分享我手头的东西,并在陷入困境之前尝试获得尽可能多的意见/建议。

第 6 名:因为不幸的是,我将把这个烂摊子从这里拿走,并试图让它更好、更顺畅地工作。

感谢所有已经抽出时间并回复的人。我已经有了一些见识。一旦我手头有更多信息,我肯定会分享更多信息。

index sql-server clustered-index heap performance-tuning

0
推荐指数
1
解决办法
108
查看次数

查询性能问题

使用 Demo from here重现我的问题,更改表结构如下,并将演示分区函数修改为 datetime

CREATE TABLE [dbo].[DemoPartitionedTable](
    [DemoID] [int] IDENTITY(1,1) NOT NULL,
    [SomeData] [sysname] NOT NULL,
    [CaptureDate] [datetime] NULL,
 CONSTRAINT [PK_DemoPartitionedTable] UNIQUE NONCLUSTERED 
(
    [DemoID] ASC,
    [CaptureDate] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
GO
Run Code Online (Sandbox Code Playgroud)

用户运行如下查询(查询 1)

SELECT [DemoID], [SomeData], [CaptureDate] FROM    
[dbo].[DemoPartitionedTable] WHERE (1=1) and (1=1) and    
CONVERT(varchar(10),CaptureDate,112) between 20190912 and 20190912
Run Code Online (Sandbox Code Playgroud)

计划是https://www.brentozar.com/pastetheplan/?id=r1veZhovH

大约需要 4 小时才能返回 500 万行

如果我使用如下分区键来改进上面的代码(查询 2)

 SELECT [DemoID], [SomeData], [CaptureDate] FROM …
Run Code Online (Sandbox Code Playgroud)

performance sql-server partitioning sql-server-2012 query-performance performance-tuning

-1
推荐指数
1
解决办法
143
查看次数

当我的查询中的表都没有使用任何 LOB 数据类型字段时,为什么 IO 统计信息会在工作表上显示大量 LOB 逻辑读取?

我有一个过程,它在数百个数据库中动态运行查询,这些数据库都具有相同的确切架构,并将结果聚合到临时表中。该查询仅涉及 3 个表(每个表都在数百万行的 10 到 100 之间,但我总共只提取了大约 50,000 行数据)。

在查看查询的汇总 IO 统计信息(通过 StatisticsParser.com - 大声喊出 Richie Rump)时,它显示创建了一个工作表,并且该工作表上有大约 550,000 个 LOB 逻辑读取。查询中所有表的常规逻辑读取总数略低于大约 400,000 次逻辑读取。

查询中的实际表都没有使用任何 LOB 数据类型,那么这到底意味着什么,它是否是我查询中瓶颈的潜在来源?

(顺便说一句,我拉回的 50,000 行数据仅相当于大约 3 MB 的数据,但我的查询在第一次运行时需要大约 10 秒才能运行(例如,当表的数据页仍在加载到内存中时) ),然后在后续运行中不到一半的时间,因此尝试查看我是否可以始终接近 <= 4s 基准测试,以及这些 LOB 逻辑读取是否与之相关。)

更新:这是一个类似的示例查询(再次查看它,我可能会发现 LOB 逻辑读取的来源)。

过程签名: sp_StoredProc_ToGetData (@IdsTable TVP (Id INT), @StartDate DateTime, @EndDate DateTime)

sp_StoredProc_ToGetData 内部的查询:

SELECT Id
INTO #IdsTableTemp
FROM @IdsTable;

-- This query is ran using dynamic SQL but for the example simplicity this is just the root …
Run Code Online (Sandbox Code Playgroud)

sql-server statistics dynamic-sql sql-server-2016 performance-tuning

-3
推荐指数
1
解决办法
447
查看次数