作为我之前关于对 Sharepoint 站点进行性能故障排除的问题的后续问题,我想知道我是否可以对 CXPACKET 等待做些什么。
我知道下意识的解决方案是通过将 MAXDOP 设置为 1 来关闭所有并行性 - 听起来是个坏主意。但另一个想法是在并行开始之前增加成本阈值。执行计划成本的默认值 5 相当低。
所以我想知道是否已经写了一个查询,可以找到执行计划成本最高的查询(我知道你可以找到那些执行持续时间最长的查询等等 - 但是执行计划成本是否可以在某处检索,也是?),这也会告诉我这样的查询是否已并行执行。
有没有人手头有这样的脚本,或者可以向我指出相关的 DMV、DMF 或其他系统目录视图的方向以找出这一点?
performance sql-server-2008 parallelism query-performance performance-tuning
我们有什么(软件):
postgresql.conf)硬件:
所以,我们必须加载到数据库 aprox。100.000.000行与bytea列,以及更简单的500.000.000行(无 LOB)。varchar第一个表上有 2 个索引(长度为 13、19),varchar第二个表上有 2个索引(长度为 18、10)。每个表也有生成 id 的序列。
到目前为止,这些操作使用 8 个并行连接和 50 个 JDBC 批处理大小进行。下图展示了系统负载:它对postgresql进程是零负载。加载 24 小时后,我们只加载了 10.000.000 行,这是非常缓慢的结果。

我们寻求帮助调整PostrgreSQL配置的目的是:
1)为了超快加载这个数量的数据,它是一次性操作,所以它可以是临时配置
2) 对于生产模式,通过它们的索引对这 2 个表执行中等数量的 SELECT,无需连接和排序。
performance insert database-tuning postgresql-9.3 bytea performance-tuning
我们使用 CentOS 6.6 版,PostgreSQL 8.4.20 版。(是的,这不是最前沿的。)
在postgresql.conf,我们有:
shared_buffers = 4096MB
Run Code Online (Sandbox Code Playgroud)
内核 shm 值设置得很好且很高:
[root@green data]# sysctl -a | grep shm
kernel.shmmax = 15922077696
kernel.shmall = 3887226
kernel.shmmni = 4096
kernel.shm_rmid_forced = 0
Run Code Online (Sandbox Code Playgroud)
我们有足够的内存:
[root@green data]# free
total used free shared buffers cached
Mem: 31097812 30474972 622840 2873672 1961088 20565360
-/+ buffers/cache: 7948524 23149288
Swap: 1959920 93852 1866068
Run Code Online (Sandbox Code Playgroud)
然而,shared_buffersreported by的值pg_settings只有 512MB,而不是 4GB 中设置的postgresql.conf:
postgres=# select name, setting, min_val, max_val, context from
pg_settings where …Run Code Online (Sandbox Code Playgroud) 在性能调优时,更重要的是:
一个例子:虽然性能调整 CPU 时间将减少~38%,但 Elapsed Time增加~22%。这是一种改进吗?
提高多达 1 亿行的表的读/写性能的常用方法是什么?
表有 column SEGMENT_ID INT NOT NULL,其中每个段有大约 100.000-1.000.000 行。写入 -SEGMENT_ID一次插入所有行,SEGMENT_ID之后不更新。读取 - 非常频繁,我需要良好的SELECT * FROM table WERE SEGMENT_ID = ?.
最明显的方法是SEGMENT_ID动态创建新表,但动态表意味着使用 ORM 甚至本机 SQL 查询框架进行黑客攻击。换句话说,你完成了有味道的代码。
您也可以使用分片,对吗?数据库是否在幕后创建新表?
我可以通过SEGMENT_ID. 但是,如果我一次插入所有与段相关的数据,我的插入是否会聚集在一起?
Postgres 还建议使用分区来处理非常大的表。
也许有某种神奇的索引可以帮助我避免动态创建新表或配置分片?
还有其他选择吗?
postgresql performance partitioning sharding performance-tuning
我在 MySQL 中有一个表,每秒钟都有很多 INSERT 和 SELECT。并且每天都会批量删除一些旧数据。删除后是否需要重新索引表?我想提高性能。有人可以提出一些建议吗?使用“innodb”作为存储引擎。我需要改变它吗?我认为它更适合并发插入和选择。请提出您的建议。我需要重新索引吗?
提前致谢..
我正在使用 MS SQL,我必须根据不同的条件在同一个表上运行多个查询。起初我在原始表上运行每个查询,尽管它们都共享一些过滤器(即日期、状态)。这花了很多时间(大约 2 分钟)。
数据行中有重复项,所有索引都是非聚集的。我只对我的标准的 4 列感兴趣,结果应该只输出所有查询的计数。
需要的列:TABLE, FIELD, AFTER, DATE, 并且每个DATE和上都有一个索引TABLE。
在创建一个只有我需要的字段的临时表后,它下降到 1:40 分钟,这仍然很糟糕。
CREATE TABLE #TEMP
(
TABLE VARCHAR(30) NULL,
FIELD VARCHAR(30) NULL,
AFTER VARCHAR(1000) NULL,
DATE DATETIME,
SORT_ID INT IDENTITY(1,1)
)
CREATE CLUSTERED INDEX IX_ADT ON #TEMP(SORT_ID)
INSERT INTO #TEMP (TABLE, FIELD, AFTER, DATE)
SELECT TABLE, FIELD, AFTER, DATE
FROM mytbl WITH (NOLOCK)
WHERE TABLE = 'OTB' AND
FIELD = 'STATUS'
Run Code Online (Sandbox Code Playgroud)
运行此 ->(216598 行受影响)
由于并非所有查询都依赖于日期范围,因此我没有将其包含在查询中。问题是只插入. …
我试图了解 SQL Server 如何尝试估计 SQL Server 2014 中的“大于”和“大于等于”where 子句。
我想我确实了解基数估计,例如,如果我这样做
select * from charge where charge_dt >= '1999-10-13 10:47:38.550'
Run Code Online (Sandbox Code Playgroud)
基数估计是 6672,可以很容易地计算为 32(EQ_ROWS) + 6624(RANGE_ROWS) + 16 (EQ_ROWS) = 6672(下面截图中的直方图)
但是当我这样做时
select * from charge where charge_dt >= '1999-10-13 10:48:38.550'
Run Code Online (Sandbox Code Playgroud)
(将时间增加到 10:48 所以它不是一步)
估计是 4844.13。
那是怎么计算的?
performance sql-server sql-server-2014 cardinality-estimates performance-tuning
在 SQL Server 中,Except运算符如何在幕后工作的内部算法是什么?它是否在内部获取每一行的哈希值并进行比较?
David Lozinksi 进行了一项研究,SQL:在不存在新记录的地方插入新记录的最快方法他表明,对于大量行,Except 语句是最快的;与我们下面的结果密切相关。
假设:我认为 Left join 会最快,因为它只比较 1 列,Except 花费的时间最长,因为它必须比较所有列。
有了这些结果,现在我们的想法是,Except 自动并在内部获取每一行的哈希值?我查看了除非执行计划,它确实使用了一些哈希。
背景:我们的团队正在比较两个堆表。表 A 不在表 B 中的行被插入到表 B 中。
堆表(来自旧文本文件系统)没有主键/guids/标识符。有些表有重复的行,所以我们找到每一行的Hash,并去除重复,并创建主键标识符。
1)首先我们运行一个except语句,排除(哈希列)
select * from TableA
Except
Select * from TableB,
Run Code Online (Sandbox Code Playgroud)
2)然后我们在HashRowId上的两个表之间运行左连接比较
select *
FROM dbo.TableA A
left join dbo.TableB B
on A.RowHash = B.RowHash
where B.Hash is null
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,Except Statement Insert 是最快的。
结果实际上与 David Lozinksi 的测试结果接近
performance sql-server hashing sql-server-2016 except performance-tuning
我的一个查询在发布后以串行执行模式运行,我注意到在从应用程序生成的 LINQ to SQL 查询中引用的视图中使用了两个新函数。所以我将这些 SCALAR 函数转换为 TVF 函数,但查询仍然以串行模式运行。
早些时候我在其他一些查询中做了 Scalar 到 TVF 的转换,它解决了强制串行执行的问题。
这是标量函数:
CREATE FUNCTION [dbo].[FindEventReviewDueDate]
(
@EventNumber VARCHAR(20),
@EventID VARCHAR(25),
@EventIDDate BIT
)
RETURNS DateTime
AS
BEGIN
DECLARE @CurrentEventStatus VARCHAR(20)
DECLARE @EventDateTime DateTime
DECLARE @ReviewDueDate DateTime
SELECT @CurrentEventStatus = (SELECT cis.EventStatus
FROM CurrentEventStatus cis
INNER JOIN Event1 r WITH (NOLOCK) ON (cis.Event1Id = r.Id)
WHERE (r.EventNumber = @EventNumber) AND r.EventID = @EventID)
SELECT @EventDateTime = (SELECT EventDateTime FROM Event1 r
WHERE (r.EventNumber = @EventNumber) AND r.EventID = …Run Code Online (Sandbox Code Playgroud) performance sql-server parallelism functions query-performance performance-tuning
performance ×10
sql-server ×5
parallelism ×2
postgresql ×2
bytea ×1
delete ×1
except ×1
functions ×1
hashing ×1
innodb ×1
insert ×1
mysql ×1
partitioning ×1
sharding ×1