我跑了EXEC sp_who2 78,我得到以下结果:

我怎样才能找到其状态暂停的原因?
INSERT基于昂贵的查询,此过程非常繁重.一个大SELECT从几个表中获取数据,并写一些3-4百万行不同的表.
没有锁/块.
将waittype它与是CXPACKET.我能理解,因为你可以在下面的图片中看到9个78.
关注我和我真正想知道的是为什么SPID78 号中的第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