标签: sql-tuning

如何找出spid状态暂停的原因?spid在等待什么资源?

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

sp_who2的结果为spid 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 sql-server optimization query-optimization sql-tuning

35
推荐指数
2
解决办法
6万
查看次数

SQL Server审核注销会创建大量读取

我正在使用SQL Server Profiler来确定哪些进程正在消耗SQL进程,我发现事件类Audit Logout导致了大量的读取并消耗了cpu进程.

这是正常的吗?或者我在SQL Server配置中有什么问题?

sql sql-server sql-server-2008 database-tuning sql-tuning

23
推荐指数
1
解决办法
2万
查看次数

为什么PostgresQL查询性能会随着时间的推移而下降,但在重建索引时会恢复

根据手册中的这个页面,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 vacuumingrebuild 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)

postgresql indexing performance sql-tuning

19
推荐指数
1
解决办法
1万
查看次数

MySQL在这种查询中自然会慢吗,还是我的配置错误?

以下查询旨在按用户接收未读消息的列表.它涉及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)

mysql sql performance sql-tuning

15
推荐指数
1
解决办法
301
查看次数

"使用INDEX ROWID表访问"是指使用索引还是表的优化器?

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)

performance oracle11g sql-tuning

7
推荐指数
1
解决办法
3万
查看次数

需要调整此SQL查询以提高性能

我有以下查询.由于其中的子查询,这会降低性能.我尝试了很多来添加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)

sql database oracle query-performance sql-tuning

6
推荐指数
1
解决办法
140
查看次数

查询语句在oracle上执行时会耗费很长时间

我的任务是改进我公司的现有代码/查询,

数据库版本

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)

sql oracle performance sql-tuning

5
推荐指数
1
解决办法
2409
查看次数

在oracle SELECT的WHERE子句中比较列与自身

我有一个多表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)

这对我来说似乎是多余的.我的疑问是,删除它们会对逻辑/性能产生任何影响吗?

提前致谢.

sql database oracle sql-tuning

3
推荐指数
1
解决办法
2799
查看次数

Teradata SQL:将随机数据插入表中进行测试

我正在尝试创建随机数据并将其插入表中.现在只是想想完成这项工作的有效方法是什么.例如

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逻辑?

sql database performance teradata sql-tuning

3
推荐指数
1
解决办法
1197
查看次数

解释计划中的成本,基数和字节是什么意思?

这是一个简单的查询: select * from customers

当我在PL/SQL Developer中编写此查询并按F5时,我会看到解释计划,但我不知道成本,基数和字节代表什么.

oracle plsqldeveloper sql-tuning

3
推荐指数
2
解决办法
1万
查看次数