自从我们迁移到 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) 我的数据结构如下:
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)
我需要执行以下查询:
第一的:
date,filter_a,filter_b,filter_c和其他人其次,使用过滤后的数据:
variable_a,variable_b并variable_cvariable_a,variable_b并variable_cvariable_a,variable_b而variable_c …performance mongodb database-design query-performance performance-tuning
我们正在使用 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
“SQL 最终子树成本”和“查询时间性能”之间的一般关系是什么?
示例:当优化查询并且它从子树成本 0.2 到 0.1 时,这是否意味着查询时间将快两倍?我在查询中没有看到这种情况。
我们有一个服务器,即使使用“设置统计时间”和“DBCC DROPCLEANBUFFERS”也无法真正衡量查询性能。服务器、事务、程序、后台项目中有不同的进程在进行。
谢谢,
performance database-design sql-server optimization performance-tuning
我们在生产中有几个数据库服务器,其中 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
我正在尝试为 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%)。
我可以做些什么来加快部分索引的创建?
系统规格:
表规格:
表定义:
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
我很好奇 Windows 2012 R2 上的默认 NUMAStatic RSS 配置文件是否可以/应该更改为具有 NUMA 设置的 SQL Server。有没有人使用 NUMA 或保守设置对高负载 SQL Server 进行性能基准测试?
我们有一个在 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
在阅读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
我有一个名为 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) performance ×9
sql-server ×4
amazon-rds ×1
cursors ×1
ddl ×1
index ×1
innodb ×1
mongodb ×1
mysql ×1
network ×1
numa ×1
optimization ×1
order-by ×1
postgresql ×1
raid ×1
sqlite3 ×1
wait-types ×1
waits ×1