Questions tagged «query-performance»

有关改善数据库查询的性能和/或效率的问题。

3
添加子查询时,PostgreSQL查询非常慢
我对具有150万行的表进行了相对简单的查询: SELECT mtid FROM publication WHERE mtid IN (9762715) OR last_modifier=21321 LIMIT 5000; EXPLAIN ANALYZE 输出: Limit (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1) -> Bitmap Heap Scan on publication (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1) Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321)) -> BitmapOr (cost=8.84..8.84 rows=1 …

3
对billions-rows-table的查询变慢//使用的索引
由于我是一名年轻的开发人员,并且不太熟练使用数据库(PostgreSQL 9.3),因此我在一个项目中遇到了一些问题,我确实需要帮助。 我的项目是关于从设备(最多1000台或更多设备)收集数据的,其中每台设备每秒发送一个数据块,每小时大约发送300万行。 目前,我有一张大表,用于存储每个设备的传入数据: CREATE TABLE data_block( id bigserial timestamp timestamp mac bigint ) 由于数据块可以(或不能)包含多种数据类型,因此还有其他表引用该data_block表。 CREATE TABLE dataA( data_block_id bigserial data CONSTRAINT fkey FOREIGN KEY (data_block_id) REFERENCES data_block(id); ); CREATE TABLE dataB(...); CREATE TABLE dataC(...); CREATE INDEX index_dataA_block_id ON dataA (data_block_id DESC); ... 一个data_block中可能有3x dataA,1x dataB但没有dataC。 数据将保留几周,因此该表中将有约50亿行。目前,表中有约6亿行,而我的查询要花很长时间。因此,我决定在timestamp和上建立索引mac,因为我的select语句总是随时间查询,通常也随时间+ mac查询。 CREATE INDEX …

1
PostgreSQL-如果同时运行多个查询,在什么情况下会加速?在什么情况下我会看到速度下降?
作为一个不是DBA的人,我会谦虚地对待你们,我敢肯定,我的问题充满了概念上的缺陷,并且“取决于”地雷。我也很确定,所有选择回答的人都希望在细节方面超出我目前的能力。 也就是说,我总体上对以下情况感到好奇: 假设我有两个非平凡的查询。 查询1平均需要2分钟才能完成。 查询2平均需要5分钟才能完成。 如果我连续运行它们,一个接一个地运行,那么我预计平均需要7分钟才能完成。这合理吗? 不仅如此,如果同时运行两个查询该怎么办?同时两个独立的连接。 我希望在什么情况下看到加速?(总时间<7分钟) 我预计在什么情况下会放缓?(总时间> 7分钟) 现在,如果我有1000个非平凡查询并发运行,我预感它将导致整体速度下降。在这种情况下,瓶颈可能在哪里?处理器?内存?开车吗 同样,我知道在不知道具体细节(我没有)的情况下,可能无法完全回答问题。我正在寻找一些一般性准则,以便在询问以下问题时考虑: 在什么情况下并发查询会导致整体加速? 在什么情况下并发查询会导致整体速度下降?

1
是否可以避免文件排序?
是否可以在以下SELECT查询中避免使用“使用临时”和“使用文件排序”?我想不通一种方法。 我尝试为top_expire和program添加索引,但没有用ORDER BY查询花费1秒以上的时间,而在localhost上仅0.003秒 询问 SELECT ad.*, p.link FROM (SELECT ad.* FROM mod_ad ad JOIN mod_ad_auta auta ON ad.id = auta.ad_id WHERE ad.active != 0 AND ad.usr_active != 0 AND ad.expire > 1371151608 AND ad.cat_id = '1' AND ad.price <= '10000' AND auta.rocnik BETWEEN '1950' AND '2013' AND auta.km BETWEEN '0' …

3
从SQL表中删除数百万行
我必须从221+百万行表中删除16+百万条记录,并且运行非常缓慢。 多谢您分享建议,以加快以下代码的速度: SET TRANSACTION ISOLATION LEVEL READ COMMITTED; DECLARE @BATCHSIZE INT, @ITERATION INT, @TOTALROWS INT, @MSG VARCHAR(500); SET DEADLOCK_PRIORITY LOW; SET @BATCHSIZE = 4500; SET @ITERATION = 0; SET @TOTALROWS = 0; BEGIN TRY BEGIN TRANSACTION; WHILE @BATCHSIZE > 0 BEGIN DELETE TOP (@BATCHSIZE) FROM MySourceTable OUTPUT DELETED.* INTO MyBackupTable …

2
查询性能调优
寻求帮助来改善此查询性能。 SQL Server 2008 R2 Enterprise,最大RAM 16 GB,CPU 40,最大并行度4。 SELECT DsJobStat.JobName AS JobName , AJF.ApplGroup AS GroupName , DsJobStat.JobStatus AS JobStatus , AVG(CAST(DsJobStat.ElapsedSec AS FLOAT)) AS ElapsedSecAVG , AVG(CAST(DsJobStat.CpuMSec AS FLOAT)) AS CpuMSecAVG FROM DsJobStat, AJF WHERE DsJobStat.NumericOrderNo=AJF.OrderNo AND DsJobStat.Odate=AJF.Odate AND DsJobStat.JobName NOT IN( SELECT [DsAvg].JobName FROM [DsAvg] ) GROUP …

2
在过去4小时内重新创建了大多数查询计划
我的SQL Server数据库性能出现问题。我已经找到了此工具sp_BlitzCache。命令执行后,我得到以下语句: 您在过去24小时内创建了92.00%的计划,在过去4小时内创建了92.00%的计划。 在确定问题的同时(使用SQL Server Profiler,我检查了StmtRecompile事件的发生),但我只能找到一些经常被重建的全文本搜索查询。但是,全文搜索查询仅占所有查询的5%。 您有什么建议可能导致其余87%的计划重新生效吗? 我有SQL Server 2012(版本11.0.6567.0)。 编辑:我添加了我的性能计数器 +---------------------------+--------------------------------+--------------+ | object_name | counter_name | cntr_value | +---------------------------+--------------------------------+--------------+ | SQLServer:Buffer Manager | Background writer pages/sec | 0 | | SQLServer:Buffer Manager | Buffer cache hit ratio | 28436 | | SQLServer:Buffer Manager | Buffer cache hit ratio base …

2
添加两列时查询不响应
当我在选择中添加两列时,查询没有响应。列的类型是nvarchar(2000)。这有点不寻常。 SQL Server版本为2014。 只有一个主索引。 整个记录只有1000行。 这是之前的执行计划(XML showplan): 之后的执行计划(XML showplan): 这是查询: select top(100) Batch_Tasks_Queue.id, btq.id, Batch_Tasks_Queue.[Parameters], -- this field btq.[Parameters] -- and this field from Batch_Tasks_Queue with(nolock) inner join Batch_Tasks_Queue btq with(nolock) on Batch_Tasks_Queue.Start_Time < btq.Start_Time and btq.Start_Time < Batch_Tasks_Queue.Finish_Time and Batch_Tasks_Queue.id <> btq.id and btq.Start_Time is not null and btq.State …

1
递归SQL查询性能问题
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 4年前关闭。 这是我第六次尝试问这个问题,也是最短的一个。先前的所有尝试都是通过类似于博客文章的方式而不是问题本身来实现的,但是我向您保证,我的问题是真实的,只是它涉及一个大主题,而没有所有这些细节,该问题将包含在其中。不清楚我的问题是什么。所以这里... 抽象 我有一个数据库,它允许以某种幻想的方式存储数据,并提供了业务流程所需的一些非标准功能。功能如下: 通过仅插入方法实现的非破坏性和非阻塞性更新/删除,允许数据恢复和自动记录(每个更改都与进行更改的用户相关) 多版本数据(同一数据可能有多个版本) 数据库级权限 最终与ACID规范和交易安全的创建/更新/删除保持一致 可以将当前数据视图快退或快进到任何时间点。 我可能还没有提到其他功能。 数据库结构 所有用户数据Items均以JSON编码字符串(ntext)的形式存储在表中。所有数据库操作都通过两个存储过程GetLatest和进行InsertSnashot,它们允许对数据进行操作,类似于GIT操作源文件的方式。 结果数据在前端被链接(JOINed)成完全链接的图,因此在大多数情况下不需要进行数据库查询。 也可以将数据存储在常规SQL列中,而不是以Json编码形式存储它们。但是,这增加了总体复杂性。 读取数据 GetLatest结果以说明形式提供数据,请考虑下图进行说明: 该图显示了对单个记录所做的更改的演变。图表上的箭头显示了进行编辑所基于的版本(假设用户正在脱机更新某些数据,与在线用户进行的更新并行,这种情况会引入冲突,基本上是两种数据版本而不是一个)。 因此,GetLatest在以下输入时间跨度内调用将产生以下记录版本: GetLatest 0, 15 => 1 <= The data is created upon it's first occurance GetLatest 0, 25 => 2 <= Inserting another version on top of first …

1
使用外键上的显式单键值克服MERGE JOIN(INDEX SCAN)
已添加7/11问题是在MERGE JOIN期间由于索引扫描而发生死锁。在这种情况下,一个事务试图在FK父表的整个索引上获得S锁,但是以前另一个事务将X锁置于索引的键值上。 让我从一个小例子开始(使用70-461 cource的TSQL2012 DB): CREATE TABLE [Sales].[Orders]( [orderid] [int] IDENTITY(1,1) NOT NULL, [custid] [int] NULL, [empid] [int] NOT NULL, [shipperid] [int] NOT NULL, ... ) 列[custid], [empid], [shipperid]是相应的相关参数[Sales].[Customers], [HR].[Employees], [Sales].[Shippers]。在每种情况下,我们在父母表中的引用列上都有一个聚集索引。 ALTER TABLE [Sales].[Orders] WITH CHECK ADD CONSTRAINT [FK_Orders_Customers] FOREIGN KEY([custid]) REFERENCES [Sales].[Customers] ([custid]) ALTER TABLE [Sales].[Orders] WITH CHECK ADD …

3
Postgres正在执行顺序扫描而不是索引扫描
我有一个表,其中包含约1000万行,并且在日期字段上有一个索引。当我尝试提取索引字段的唯一值时,即使结果集只有26个项目,Postgres也会运行顺序扫描。为什么优化师会选择此计划?而我该如何避免呢? 从其他答案中,我怀疑这与查询和索引都息息相关。 explain select "labelDate" from pages group by "labelDate"; QUERY PLAN ----------------------------------------------------------------------- HashAggregate (cost=524616.78..524617.04 rows=26 width=4) Group Key: "labelDate" -> Seq Scan on pages (cost=0.00..499082.42 rows=10213742 width=4) (3 rows) 表结构: http=# \d pages Table "public.pages" Column | Type | Modifiers -----------------+------------------------+---------------------------------- pageid | integer | not null default nextval('... …

2
简单的删除,但是复杂的执行计划
当我运行此删除时: DELETE FROM ETLHeaders WHERE ETLHeaderID < 32465870 ...它删除39,157行。它应该很简单,因为它是在ETLHeaderID上删除的,而ETLHeaderID是聚簇索引和主键。但是(根据执行计划)它似乎达到361,190行并使用其他索引。该表确实具有XML数据类型的字段(以防影响此DELETE)。 有任何想法为何以及如何加快此DELETE? 这里的执行计划: http ://sharetext.org/qwDY这里的表模式:http : //sharetext.org/Vl9j 谢谢

1
SentryOne Plan Explorer是否将UDF中的读数计数?
我有这样的查询: select dbo.fn_complexFunction(t.id) from mytable t 在SQL Sentry Plan Explorer中,我注意到我必须运行Get Estimated Plan才能使查询计划包括UDF。 运行“获取实际计划”时,似乎逻辑读取和其他指标未包括UDF中发生的操作。在这种情况下,是否是使用Profiler的唯一解决方法?

4
什么可以加快SQL计数查询的速度?
在进行计数(总计)SQL查询时,什么可以加快这3个数据库系统的执行时间?我敢肯定,有很多事情可以加快它的速度(硬件就是其中之一),但是我只是DBA的新手,所以我确定我会在这里得到一些答案。我将大约1.57亿行迁移到了SQL Server数据库,而这种查询将永远持续下去。但是在我的源Netezza数据库中,它需要几秒钟。 例如: Netezza 6: SELECT COUNT(*) FROM DATABASENAME..MYTABLE Oracle 11g: SELECT COUNT(*) FROM MYTABLE SQL Server 2012: SELECT COUNT(*) FROM DATABASENAME.[dbo].[MYTABLE]

1
MySQL:在内部查询中使用“ ORDER BY”优化UNION
我只是建立了一个由多个具有相同布局的表组成的日志系统。 每个数据源都有一个表。 对于日志查看器,我想 UNION所有日志表, 通过帐户过滤它们, 添加一个伪列以标识源, 按照时间排序他们, 并限制它们的分页。 所有表都包含一个称为zeitpunkt索引日期/时间列的字段。 我的第一次尝试是: (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt AS zeit, 'hp' AS source FROM is_log AS l WHERE l.account_id = 730) UNION (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt, 'ig' AS source FROM ig_is_log AS l WHERE l.account_id = 730) ORDER …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.