Chinaunix

标题: 数据库中某表的出现异常,请高手赐教 [打印本页]

作者: yunzhongyue    时间: 2006-02-13 09:54
标题: 数据库中某表的出现异常,请高手赐教
在数据库a中执行一SQL语句时,总是显示“执行中。。。。。。”然后就停在那,但是以前执行这一SQL是可以的,在同一机器上另一个数据库b上也是可以的,数据库a与b的结构相同,而且检查过SQL所涉及到的表的索引都一样。
请各位指点!谢谢。。。


[ 本帖最后由 yunzhongyue 于 2006-2-13 13:27 编辑 ]
作者: ahkai    时间: 2006-02-13 10:53
日志满了吧?
作者: jl8323    时间: 2006-02-13 10:55
标题: 回复 1楼 yunzhongyue 的帖子
online.log
onstat .......
作者: yunzhongyue    时间: 2006-02-13 11:48
数据库没有问题的,现在我又发现只是一个表有问题
当执行

  1. SELECT *                       FROM pmn_file WHERE
  2. (pmn20 - pmn50 +pmn55)>0
复制代码

是没有问题的,可是执行
  1. SELECT UNIQUE pmn01  FROM pmn_file WHERE
  2. (pmn20 - pmn50 +pmn55)>0
复制代码

就一直显示“执行中。。。”好像死机了一样
以前这个SQL是可以执行的啊!

[ 本帖最后由 yunzhongyue 于 2006-2-13 11:55 编辑 ]
作者: ahkai    时间: 2006-02-13 13:46
标题: 回复 4楼 yunzhongyue 的帖子
会不会是dbspace的空间不够sort操作?

用onstat -g mgm命令看看是不是在等待什么资源?

Load Control:    (Memory)      (Scans)  (Priority)  (Max Queries)   (Reinit)
                              Gate 1       Gate 2      Gate 3          Gate 4       Gate 5
(Queue Length)           0            0           0                 0                     0

[ 本帖最后由 ahkai 于 2006-2-13 14:02 编辑 ]
作者: yunzhongyue    时间: 2006-02-13 14:39
[informix@nberp8 informix]$ onstat -g mgm

Informix Dynamic Server Version 7.30.UC7   -- On-Line -- Up 7 days 15:41:47 -- 742392 Kbytes

Memory Grant Manager (MGM)
--------------------------

MAX_PDQPRIORITY:  100
DS_MAX_QUERIES:    13691
DS_MAX_SCANS:      1048576
DS_TOTAL_MEMORY:   1752544 KB

Queries:   Active     Ready   Maximum
                0         0     13691

Memory:     Total      Free   Quantum
(KB)       1752544   1752544       128

Scans:      Total      Free   Quantum
           1048576   1048576         1

Load Control:    (Memory)      (Scans)  (Priority)  (Max Queries)   (Reinit)
                   Gate 1       Gate 2      Gate 3         Gate 4     Gate 5
(Queue Length)          0            0           0              0          0

Active Queries:  None

Ready Queries:  None

Free Resource        Average #        Minimum #
--------------    ---------------     ---------
Memory               0.0 +- 0.0          219068
Scans                0.0 +- 0.0          1048576

Queries              Average #        Maximum #    Total #
--------------    ---------------     ---------    -------
Active               0.0 +- 0.0             0          0
Ready                0.0 +- 0.0             0          0

Resource/Lock Cycle Prevention count:  0
各位帮我看看是否有什么不正常的,谢谢,我看不太懂
作者: ahkai    时间: 2006-02-13 14:45
标题: 回复 6楼 yunzhongyue 的帖子
Load Control:    (Memory)      (Scans)  (Priority)  (Max Queries)   (Reinit)
                              Gate 1       Gate 2      Gate 3          Gate 4       Gate 5
(Queue Length)           0            0           0                 0                     0

都是0表示没有在等待资源。
作者: ahkai    时间: 2006-02-13 14:52
标题: 回复 6楼 yunzhongyue 的帖子
用onstat -g sql看看当前的SQL,选择你执行的SQL的session id。

执行onstat -g sql session_id ,看看有没有ISAM ERROR或SQL ERROR。
作者: eric.xie    时间: 2006-02-13 20:00
原帖由 yunzhongyue 于 2006-2-13 11:48 发表
数据库没有问题的,现在我又发现只是一个表有问题
当执行

  1. SELECT *                       FROM pmn_file WHERE
  2. (pmn20 - pmn50 +pmn55)>0
复制代码

是没有问题的,可是执行
[code]SELECT UNIQU ...



表格的是数据是不是很多,检查pmn_file的索引,对表格做update statictis个优化,在试试看!
作者: yunzhongyue    时间: 2006-02-14 08:29
原帖由 eric.xie 于 2006-2-13 20:00 发表



表格的是数据是不是很多,检查pmn_file的索引,对表格做update statictis个优化,在试试看!


多谢指点,此表的数据大概有25万条,我怀疑也是索引坏掉了,我把数据库重新启动了一下就OK了。

[ 本帖最后由 yunzhongyue 于 2006-2-14 08:30 编辑 ]
作者: yunzhongyue    时间: 2006-04-03 12:56
又出现这个问题了,这次换了一个表,大家帮忙看看,不可能每次都重启数据库啊
作者: ahkai    时间: 2006-04-03 13:31
标题: 回复 11楼 yunzhongyue 的帖子
online日志有异常提示吗?
作者: hnren    时间: 2006-04-03 21:56
原帖由 yunzhongyue 于 2006-2-13 11:48 发表
数据库没有问题的,现在我又发现只是一个表有问题
当执行

  1. SELECT *                       FROM pmn_file WHERE
  2. (pmn20 - pmn50 +pmn55)>0
复制代码

是没有问题的,可是执行
[code]SELECT UNIQU ...

你可以将sql改一下执行:

SELECT  pmn01  FROM pmn_file WHERE
(pmn20 - pmn50 +pmn55)>0
into temp aa;
select unique pmn01 from aa;
作者: yunzhongyue    时间: 2006-04-04 08:26
原帖由 ahkai 于 2006-4-3 13:31 发表
online日志有异常提示吗?

13:35:57  Checkpoint Completed:  duration was 0 seconds.
13:37:25  Logical Log 160927 Complete.
13:40:58  Checkpoint Completed:  duration was 0 seconds.
13:43:21  Logical Log 160928 Complete.
13:44:34  listener-thread: err = -25580: oserr = 0: errstr = : ºô¸ô¨ç¼Æµo¥Í¨t²Î¿ù»~.

只有这个,别的就没了,这个应该不算异常吧。
我觉得应该是这个表被锁住了,可是用ONMODE -K却以找不到。
最后只能给全公司发了个紧急维护通知,重启了一下就可以了。
可重启也不是办法啊,郁闷。。。。。。
作者: yunzhongyue    时间: 2006-04-04 08:28
原帖由 hnren 于 2006-4-3 21:56 发表

你可以将sql改一下执行:

SELECT  pmn01  FROM pmn_file WHERE
(pmn20 - pmn50 +pmn55)>0
into temp aa;
select unique pmn01 from aa;


这个SQL是程序中的,以前运行也没问题的,而且换个相同的数据库运行也是没有
问题的,应该是这个表有问题。

update statistics high for table THIS_TAB 都做过了,还是没有用。

[ 本帖最后由 yunzhongyue 于 2006-4-4 08:29 编辑 ]
作者: alexander_lu    时间: 2006-04-04 08:50
用oncheck 检查一下这个表的索引
作者: yunzhongyue    时间: 2006-04-04 09:06
现在这个表已恢复正常了,检查还有用吗?
是不是数据库重启时会重建每个表的索引啊?
作者: lmtok    时间: 2006-04-04 09:51
我觉得可以先把两个sql的查询路径先找出来看一下,再判断是那里出了问题
作者: yunzhongyue    时间: 2006-04-04 11:01
原帖由 lmtok 于 2006-4-4 09:51 发表
我觉得可以先把两个sql的查询路径先找出来看一下,再判断是那里出了问题

如何找出SQL的查询路径啊,这个SQL一直都是可用的啊
作者: lansing888    时间: 2006-04-04 18:20
标题: 回复 1楼 yunzhongyue 的帖子
给表做一下update statistics
作者: 灰鹰_greyhawk    时间: 2011-06-24 16:51
SELECT *                       FROM pmn_file WHERE

(pmn20 - pmn50 +pmn55)>0

这个语句的条件是个计算式,索引是没有用的,所以跟更新索引无关.你之所以看到一个快,一个慢是因为第一个查询只要命中第一行的时候就马上返回结果,然后引擎继续查,你可以先看返回的这部分数据,而第2个因为有unique的限制,所以要在服务器端检索出所有数据并且确认unique了才返回,所以就要等.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2