标签: performance-tuning

超出 Amazon RDS MySQL 5.5 Innodb Lock 等待超时

自从我们迁移到 Amazon RDS 以来,我们遇到了一些非常疯狂的性能问题,今天我们开始遇到锁定问题。正因为如此,我认为这只是一个超时问题,并去检查我们使用的内存。我们交换了大约 70MB 的数据。我用 mysqltuner 进行了一次内存追捕,它说可能有大约 400% 的最大内存使用率。多亏了 Percona 的配置向导,我现在把它降到了 100% 以上。

但是,我们仍然有这个锁问题,所以我假设它与内存/交换无关。为什么我仍然收到锁定?这里发生了什么?

我相信重新启动将解决问题,但这不应该是解决方案。我们可以做些什么来防止将来发生这种情况?我尝试刷新查询缓存和表 - 有效。

由于 RDS,其他类型的冲洗不起作用:/

以下是我可以提供的大量信息:

询问

INSERT INTO `myTable` (`firstName`, `lastName`, `email`) VALUES ('Travis', 'B...', '...@gmail.com')
Run Code Online (Sandbox Code Playgroud)

错误信息

Lock wait timeout exceeded; try restarting transaction
Run Code Online (Sandbox Code Playgroud)

表模式

CREATE TABLE IF NOT EXISTS `myTable` (
  `id` int(15) NOT NULL AUTO_INCREMENT,
  `firstName` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `lastName` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,

  PRIMARY KEY (`id`),
  UNIQUE KEY `Unique Emails` (`email`),
  KEY …
Run Code Online (Sandbox Code Playgroud)

mysql innodb performance amazon-rds performance-tuning

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

如何处理5亿+项的查询

我的数据结构如下:

date: <timestamp>
filter_a: <integer> -> range [0, 1000]
filter_b: <integer> -> range [0, 1000]
filter_c: <integer> -> range [0, 86400]
filter_d: <integer> -> range [0, 6]
group: <string>
second_group: <integer>
variable_a: <float>
variable_b: <float>
variable_c: <float>
a couple more no very important
Run Code Online (Sandbox Code Playgroud)

我需要执行以下查询:

第一的:

  • 通过筛选数据datefilter_afilter_bfilter_c和其他人

其次,使用过滤后的数据:

  • 计算所有记录
  • 得到平均variable_avariable_bvariable_c
  • 得到标准差variable_avariable_bvariable_c
  • 拿到四分位数variable_avariable_bvariable_c …

performance mongodb database-design query-performance performance-tuning

9
推荐指数
1
解决办法
404
查看次数

sp_cursorprepexec 导致 5300 万次读取?

我们正在使用 SQL Server 2012 运行 Dynamics AX 2012 安装。我知道不应再使用游标,但 AX 正在使用它,我们无法更改此行为,因此我们必须使用它。

今天我发现了一个非常糟糕的查询,读取次数超过 5300 万次,执行时间超过 20 分钟。

我通过我们的监控工具 SentryOne 捕获了这个查询。

declare @p1 int
set @p1=1073773227
declare @p2 int
set @p2=180158805
declare @p5 int
set @p5=16
declare @p6 int
set @p6=1
declare @p7 int
set @p7=2
exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 bigint,@P2 nvarchar(5),@P3 bigint,@P4 nvarchar(8),@P5 bigint,@P6 bigint,@P7 bigint,@P8 bigint,@P9 bigint,@P10 bigint,@P11 bigint,@P12 bigint,@P13 bigint,@P14 bigint,@P15 bigint,@P16 bigint,@P17 bigint,@P18 bigint,@P19 nvarchar(5),@P20 bigint,@P21 bigint,@P22 bigint,@P23 bigint,@P24 bigint',N'SELECT T1.PRODUCT,T1.EXTERNALVENDPARTY,T1.LIFECYCLESTATUS,T1.RECID,T2.ECORESPRODUCT,T2.ECORESDISTINCTPRODUCTVARIANT,T2.SGE,T2.ECORESREFORDERNUM,T2.ORDERNUM,T2.RECID,T3.ECORESREFORDERNUM,T3.NAME1,T3.NAME2,T3.NAME3,T3.RECID,T4.ECORESPRODUCT,T4.EXTERNALITEMID,T4.ECORESDISTINCTPRODUCTVARIANT,T4.RECID,T5.RECID,T5.PERSON,T6.RECID,T6.NAME,T6.INSTANCERELATIONTYPE,T7.RECID,T7.NAME,T7.INSTANCERELATIONTYPE,T8.PARTY,T8.ACCOUNTNUM,T8.RECID,T9.RECID,T9.DISPLAYPRODUCTNUMBER,T9.INSTANCERELATIONTYPE,T10.PRODUCT,T10.CATEGORY,T10.RECID,T11.RECID,T11.CODE,T11.NAME,T11.INSTANCERELATIONTYPE FROM INVENTTABLE T1 CROSS JOIN ECORESPRODUCTORDERNUM …
Run Code Online (Sandbox Code Playgroud)

performance sql-server cursors sql-server-2012 microsoft-dynamics performance-tuning

9
推荐指数
1
解决办法
1219
查看次数

子树成本和性能时间之间的 SQL 关系

“SQL 最终子树成本”和“查询时间性能”之间的一般关系是什么?

示例:当优化查询并且它从子树成本 0.2 到 0.1 时,这是否意味着查询时间将快两倍?我在查询中没有看到这种情况。

我们有一个服务器,即使使用“设置统计时间”和“DBCC DROPCLEANBUFFERS”也无法真正衡量查询性能。服务器、事务、程序、后台项目中有不同的进程在进行。

谢谢,

performance database-design sql-server optimization performance-tuning

9
推荐指数
1
解决办法
9333
查看次数

最新服务器上的性能较低

我们在生产中有几个数据库服务器,其中 4 个具有非常相似的硬件配置。Dell PowerEdge R620,唯一的区别是2个最新的(3个月前购买和配置的)有RAID控制器v710,256GB RAM和CPU是2个物理Xeon E5-2680 2.80GHz。旧的(大约 1 年前购买和配置)具有 RAID 控制器 v700、128GB RAM 并在 witl 2 物理 Xeon E5-2690 2.90GHz 上运行。BIOS 已更新,所有驱动程序均已更新至最新版本等。所有运行 SQL Server 2008R2 Enterprise (SP1) 的系统均已更新至最新 CU 和 Windows 2012R2 Standard。两者都在 200 GB SSD x5 RAID10 上运行。每个数据库只运行一个数据库,使用调用 SSIS 包的作业进行同步。我们的系统管理员运行了大量性能和压力测试,以确保我们没有任何硬件或网络配置错误或故障。正如预期的那样,最新的表现出更好的性能结果。到现在为止还挺好。

我们可以在 Kibana 的屏幕截图中看到我们遇到的问题。黄色和橙色是 2 台较新的服务器(桌子上有 6,7 台),低于所有其他服务器。很明显,这两个新服务器的响应时间较慢。不仅如此,这 2 台服务器的负载也比 2 台较旧的服务器少(浅蓝色和深蓝色线 - 桌子上的 4,5)。

在此处输入图片说明 有几个监视脚本收集有关性能计数器的信息。用DMV和第三方监控工具尽可能挖掘,我手头有很多信息。但是应该有(ofc)一些我在这里遗漏的东西,因为我找不到这个较慢的响应时间的答案。

2 台最新的服务器使用的 RAM 较少,但我想这是意料之中的,与其他较旧的服务器相比,因为它们的负载较低。

| Server Name| Mem_MB |    Mem_GB    | Server_RAM_GB | SQL_max_mem_GB| SQL_min_mem_GB |
|------------|--------|--------------|---------------|---------------|----------------|
|      4     |  41108 | 40.145263671 …
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2008-r2 configuration performance-testing performance-tuning

8
推荐指数
1
解决办法
234
查看次数

加速创建 Postgres 部分索引

我正在尝试为 Postgres 9.4 中的大型(1.2TB)静态表创建部分索引。

我的数据是完全静态的,所以我可以插入所有数据,然后创建所有索引。

在这个 1.2TB 的表中,我有一个名为的列run_id,可以清晰地划分数据。通过创建涵盖一系列run_ids 的索引,我们获得了出色的性能。下面是一个例子:

CREATE INDEX perception_run_frame_idx_run_266_thru_270
ON run.perception
(run_id, frame)
WHERE run_id >= 266 AND run_id <= 270;
Run Code Online (Sandbox Code Playgroud)

这些部分索引为我们提供了所需的查询速度。不幸的是,每个部分索引的创建大约需要 70 分钟。

看起来我们的 CPU 有限(top进程显示为 100%)。
我可以做些什么来加快部分索引的创建?

系统规格:

  • 18核至强
  • 192GB 内存
  • RAID 中的 12 个 SSD
  • 自动吸尘器关闭
  • 维护工作内存:64GB(太高?)

表规格:

  • 大小:1.26 TB
  • 行数:105.37亿
  • 典型的索引大小:3.2GB(有 ~.5GB 的差异)

表定义:

CREATE TABLE run.perception(
id bigint NOT NULL,
run_id bigint NOT NULL,
frame bigint NOT NULL,
by character varying(45) NOT NULL,
by_anyone bigint NOT …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index ddl performance-tuning postgresql-performance

8
推荐指数
1
解决办法
3546
查看次数

RSS 配置文件对使用 NUMA 设置的 SQL Server 有影响吗?

我很好奇 Windows 2012 R2 上的默认 NUMAStatic RSS 配置文件是否可以/应该更改为具有 NUMA 设置的 SQL Server。有没有人使用 NUMA 或保守设置对高负载 SQL Server 进行性能基准测试?

performance sql-server network numa performance-tuning

8
推荐指数
1
解决办法
2135
查看次数

巨大的“网络 I/O”类型资源等待

我们有一个在 WinDev 中开发的内部应用程序,它使用在 Windows Server 2008R2 上运行的 Microsoft SQL Server 2012 SP2(内部版本 11.0.5058)数据库。

我们遇到了性能问题。同时,Activity Monitor 显示了大量的“网络 I/O”类型的等待,在这种情况下,“巨大”是指一台运行时间少于 6 天的服务器的累积等待时间为 700 万秒:

在此处输入图片说明

网络连接本身很好,服务器连接 10G,而客户端是连接 1Gb 的物理桌面或 10G 的远程桌面服务器。网络监控显示没有链路饱和,也没有任何其他网络问题。CPU、RAM 和磁盘 I/O 也很好。

从我读到的有关网络 I/O 等待的信息来看,它与查询返回的、客户端未使用的记录有关。所以我倾向于认为问题出在应用程序中,但我很难让开发人员对此进行调查(不是他们不愿意这样做,而是他们很忙,似乎他们对根没有任何线索原因及解决方法)

所以问题:

  • 我认为性能问题与那些网络 I/O 等待有关吗?

  • 我可以向开发团队提供什么线索来帮助他们确定原因?

  • 除了修复应用程序之外,我是否可以对 SQL Server 本身进行一些微调以缓解该问题?

performance sql-server sql-server-2012 wait-types waits performance-tuning

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

为什么不建议将 RAID 5 用于日志文件?

在阅读Grant Friitchey 编写的SQL Server Query Performance Tuning 时,我发现很难理解以下部分:避免 RAID 5 用于 t-logs 因为,对于每个写入请求,RAID 5 磁盘阵列产生的磁盘 I/O 数量是比较的两倍到 RAID 1 或 RAID 10。

我知道 RAID 5 通过奇偶校验功能区别于其他 RAID。这意味着如果某些驱动器出现故障,则可以从其他驱动器恢复丢失的数据。我想了解为什么不建议将 RAID 5 用于事务日志文件。书中的解释对我来说还不够。也许有人可以向我解释或提供一篇好文章。

performance transaction-log sql-server-2014 raid query-performance performance-tuning

8
推荐指数
1
解决办法
887
查看次数

Sqlite:在由整数元组组成的表中查找下一个或上一个元素

我有一个名为 tuples 的 sqlite 表,定义如下

create table tuples
(
    a INTEGER not null,
    b INTEGER not null,
    c INTEGER not null,
    d INTEGER not null,
    primary key (a, b, c, d)
) without rowid;
Run Code Online (Sandbox Code Playgroud)

充满了数百万个独特的元组 (>1TB)。新元组经常被插入,带有“随机”值。仅在极少数情况下才会删除行。

对于访问数据库的外部进程,我需要在表中找到“下一个”或“上一个”现有的 4 元组。

例如:给定元组 (1-1-1-1)、(1-1-1-4) 和 (1-2-3-4),对于元组 (1-1-1-3)(不需要存在于表中)“下一个”元素是(1-1-1-4),前一个是(1-1-1-1)(两者都需要存在)。因为 (1-1-1-4) (1-2-3-4) 是“下一个”元素。Corner-case:如果实际上没有“next”或“previous”元素,则结果允许为空。(1-2-3-4) 没有“下一个”元素。

目前我试图找到下一个元组 ("center" is (1-1-1-3))

select a,b,c,d from tuple
where (a == 1 AND b == 1 AND c == 1 AND d > 3) OR
      (a == 1 AND b == 1 …
Run Code Online (Sandbox Code Playgroud)

order-by query-performance performance-tuning sqlite3

8
推荐指数
1
解决办法
226
查看次数