我跑了EXEC sp_who2 78
,我得到以下结果:
我怎样才能找到其状态暂停的原因?
INSERT
基于昂贵的查询,此过程非常繁重.一个大SELECT
从几个表中获取数据,并写一些3-4百万行不同的表.
没有锁/块.
将waittype
它与是CXPACKET
.我能理解,因为你可以在下面的图片中看到9个78.
关注我和我真正想知道的是为什么SPID
78 号中的第1号被暂停.
我知道当a的状态SPID
被暂停时,它意味着进程正在等待资源,并且当它获取其资源时它将恢复.
我怎样才能找到更多这方面的细节?什么资源?为什么不可用?
我使用了下面的代码以及其中的变化,但是我还能做些什么来找出SPID
暂停的原因?
select *
from sys.dm_exec_requests r
join sys.dm_os_tasks t on r.session_id = t.session_id
where r.session_id = 78
Run Code Online (Sandbox Code Playgroud)
我已经习惯了EXEC sp_who2 78
.我得到的这个特殊spid78的结果如下:(分为3个图片以适应屏幕)
我正在使用SQL Server Profiler来确定哪些进程正在消耗SQL进程,我发现事件类Audit Logout
导致了大量的读取并消耗了cpu进程.
这是正常的吗?或者我在SQL Server配置中有什么问题?
根据手册中的这个页面,indexes don't need to be maintained
.但是,我们运行的PostgresQL表具有连续的速率updates
,deletes
并且inserts
随着时间的推移(几天)会出现严重的查询降级.如果我们删除并重新创建索引,则会恢复查询性能.
我们正在使用开箱即用的设置.
我们测试中的表目前是空的,并且增长到50万行.它有一个相当大的行(许多文本字段).
我们searching based of an index, not the primary key
(我已经确认该指数正在使用,至少在正常条件下)
该表用作单个进程的持久存储.在Windows上使用PostgresQL和Java客户端.
我愿意放弃insert and update performance
以保持查询性能.
我们正在考虑重新架构应用程序,以便数据分布在各种动态表中,使我们能够定期删除和重建索引,而不会影响应用程序.然而,和往常一样,有一段时间可以让这个工作起作用,我怀疑我们在配置或使用方面缺少一些基本的东西.
我们考虑forcing vacuuming
和rebuild to run at certain times
,但我怀疑locking period for such an action would cause our query to block
.这可能是一个选项,但有一些实时(3-5秒的窗口)含义需要我们的代码中的其他更改.
附加信息: 表和索引
CREATE TABLE icl_contacts
(
id bigint NOT NULL,
campaignfqname character varying(255) NOT NULL,
currentstate character(16) NOT NULL, …
Run Code Online (Sandbox Code Playgroud) 以下查询旨在按用户接收未读消息的列表.它涉及3个表:recipients
包含用户与消息ID的关系,messages
包含消息本身,并message_readers
包含哪些用户已阅读哪些消息的列表.
查询可靠地需要4.9秒 - 这严重损害了我们的性能,尤其令人担忧,因为我们希望数据库最终会增加几个数量级.当然,这是一个固有的重要查询,但数据集很小,直观地说它似乎应该快得多.服务器有足够的内存(32gb),整个数据库应始终加载到RAM中,并且盒子上没有其他任何东西在运行.
这些表都很小:
recipients: 23581
messages: 9679
message_readers: 2685
Run Code Online (Sandbox Code Playgroud)
查询本身:
SELECT
m.*
FROM
messages m
INNER JOIN recipients r ON r.message_id = m.id
LEFT JOIN message_readers mr ON mr.message_id = m.id
WHERE
r.id = $user_id
AND (mr.read_by_id IS NULL OR mr.read_by_id <> $user_id)
Run Code Online (Sandbox Code Playgroud)
解释计划非常简单:
+----+-------------+-------+--------+-----------------------------------+-----------------------------------+---------+--------------------------------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-----------------------------------+-----------------------------------+---------+--------------------------------+-------+-------------+
| 1 | SIMPLE | …
Run Code Online (Sandbox Code Playgroud) I have query that join two very big tables and ran explain plan on that it showing like this..
----------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 31 | 7 (0)| 00:00:01 |
| 1 | PX COORDINATOR | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | | | | |
| 3 | NESTED …
Run Code Online (Sandbox Code Playgroud) 我有以下查询.由于其中的子查询,这会降低性能.我尝试了很多来添加Join而不是Subquery.但是徒劳无功 任何人都可以告诉我如何使用JOIN重写此查询?
update Table_1
set status = 'Status_2'
where status ='status_1' and (col_1, col_2, col_3, nvl(col_4,0), col_5) in (
select col_1, col_2, col_3, nvl(col_4,0), col_5 from Table_2 where status ='Status_0');
Run Code Online (Sandbox Code Playgroud)
请看SELECT * FROM table(DBMS_XPLAN.Display);
下面的内容
Plan hash value: 1290346170
------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 1 | 376 | 456 (3)| 00:00:06 |
| 1 | UPDATE | Table_1 | | …
Run Code Online (Sandbox Code Playgroud) 我的任务是改进我公司的现有代码/查询,
数据库版本
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
"CORE 10.2.0.4.0 Production"
TNS for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Productio
NLSRTL Version 10.2.0.4.0 - Production
Run Code Online (Sandbox Code Playgroud)
这就是问题 - 当执行下面的代码时,完成工作所需的时间超过4小时,大约需要7到8个小时.
3小时37分钟内395行数据
SELECT DISTINCT GROUP_DIST_NUMBER, BEGIN_DATE, PRICE_DROP_DATE
FROM (SELECT DISTINCT
G.GROUP_DIST_NUMBER,
TO_DATE (:B2, 'DD-MON-YYYY') BEGIN_DATE,
TO_DATE (:B2, 'DD-MON-YYYY') PRICE_DROP_DATE
FROM POS_DISTI_GROUP G,
POS_CUST_XREF M,
S_CPT_SEQ_NO C,
PP_STD_PRICE P,
S_CPT_AUDIT A,
RPT_PRODUCT_VALUE_LEVEL L
WHERE G.END_DATE > TO_DATE (:B2, 'DD-MON-YYYY')
AND G.GROUP_DIST_NUMBER = M.DIST_NUMBER
AND M.SG_BILL_TO_CUST_NO = …
Run Code Online (Sandbox Code Playgroud) 我有一个多表SELECT查询,它将列值与自身进行比较,如下所示:
SELECT * FROM table1 t1,table2 t2
WHERE t1.col1=t2.col1 --Different tables,So OK.
AND t1.col1=t1.col1 --Same tables??
AND t2.col1=t2.col1 --Same tables??
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎是多余的.我的疑问是,删除它们会对逻辑/性能产生任何影响吗?
提前致谢.
我正在尝试创建随机数据并将其插入表中.现在只是想想完成这项工作的有效方法是什么.例如
Create volatile table mytb , no fallback, no journal
( C1 integer not null
C2 Varchar (50) Not null ,
C3 D1 Date Not null,
C4 D2 date not null
) with data primary index ( c1) on commit preserve rows;
Run Code Online (Sandbox Code Playgroud)
我想要的是为每个列值的特定List或范围的X迭代随机插入值.例如C1范围在30到3000000之间C2是一个列表('已批准','待定','未知','有争议','wip','已处理','已预处理','已拒绝')等等C3是01-01-1999到2015年3月12日之间的日期等等.然后说100万次迭代我想为这些列插入随机值并为某些值创建一个SKEW-这些值应该是丰富的与其他人相比.有人曾经对此进行过挖掘.最好的方法是什么 - 递归Q逻辑?
这是一个简单的查询: select * from customers
当我在PL/SQL Developer中编写此查询并按F5时,我会看到解释计划,但我不知道成本,基数和字节代表什么.
sql-tuning ×10
sql ×7
performance ×5
oracle ×4
database ×3
sql-server ×2
indexing ×1
mysql ×1
optimization ×1
oracle11g ×1
postgresql ×1
teradata ×1