一個讓人很困惑的問題。(有時候存取數據變慢)

Tosp2012 2011-08-05 09:26:41
我自己開發的程序,之前讀取數據(10w行)都一直很正常。
最近有時候總是出現不固定時間的訪問數據庫困難的情況。
平時讀取的數據3秒左右就可以顯示出來,有時候要10分鐘左右。
出現的頻率也很高,一天總有那麼幾次。哎,急死人啦。
真不知道是那裡出現了問題。
最近有做過數據庫同步的操作,不知道是否因為這個原因?

請各位指點迷津,萬分感謝!
...全文
110 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tosp2012 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ssp2009 的回复:]
分析你的查询语句,查看执行计划,时间浪费在哪里。
[/Quote]
如果單條的測試查詢語句的話,時間也都是非常短的。一般情況下,程序都是正常的。就是有時候,有個幾分鐘出現讀數據卡死的情況。
Tosp2012 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ap0405140 的回复:]
楼主是什么生猛的程序要一次读取10W行记录?真有必要吗,前端处理得过来吗.

可以先在表名后加(nolock)试试: select * from table (nolock)

如果还有问题,就要详细分析原因了.例如查看执行计划.
[/Quote]
是後臺的數據量有10w,前端要顯示的也就幾百條而已,是我沒表達清楚。Sorry
Tosp2012 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 nbdba 的回复:]
引用 8 楼 tosp2012 的回复:
引用 1 楼 nbdba 的回复:
这个最可能的原因是锁,就是数据插入和更新诸塞了查询动作,最简单的解决方法是在查询时允许脏读,具体实现是在查询加with(nolock)提示。

寫數據時,我的程序確實有使用了事物。但這個操作的時間會非常短的。數據量也比較少

测试时最有效的,方法给你了,试不试由你

如果一切问题都是可以用分析来解决的话,……
[/Quote]
說得要道理,已經按照您的方法測試了。但這個結果不是馬上就能知道,因為問題是有時候才會發生。

nzperfect 2011-08-05
  • 打赏
  • 举报
回复
你的应用服务器和DB服务器在一个机房吗?
你的情况要具体分析,首先要排除网络情况
然后要看一下sql 内存使用情况,在查询变慢时,db server上的等待情况等等
Tosp2012 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 nbdba 的回复:]
搂主第一步应该是将你的查询加with(nolock)提示测试。

你的情况还有一种可能是,你的内存设置不合理,没有设置SQL最大内存,这样运行时间久了以后,所有内存被占用,大数据量查询时需要与硬盘交换数据引起速度下降,这个检查并设置合适的最大内存数就可以了

另外,检查下一次返回10W数据的必要性,如果是给用户直接看的,一般几百条就看不过来了,如果是为了传给其他地方或者导出,那就没问题。
……
[/Quote]
我試試加 nolock,另外我沒有說明白。是後臺數據量有10w條,不是要全部一次性返回。檢索出來的數據也就幾百條而已。
NBDBA 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tosp2012 的回复:]
引用 1 楼 nbdba 的回复:
这个最可能的原因是锁,就是数据插入和更新诸塞了查询动作,最简单的解决方法是在查询时允许脏读,具体实现是在查询加with(nolock)提示。

寫數據時,我的程序確實有使用了事物。但這個操作的時間會非常短的。數據量也比較少
[/Quote]
测试时最有效的,方法给你了,试不试由你

如果一切问题都是可以用分析来解决的话,就不会有性能问题了,分析往往会出来似是而非的结果,这时辩论是没有任何效果的,唯有测试
Tosp2012 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 acherat 的回复:]
楼主可能要去分析,跟踪看看,找到引起的具体因素。
[/Quote]
這個就很難跟蹤啊,問題是這個不定時的發生。當你測試的時候,都一切正常。
Tosp2012 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nbdba 的回复:]
这个最可能的原因是锁,就是数据插入和更新诸塞了查询动作,最简单的解决方法是在查询时允许脏读,具体实现是在查询加with(nolock)提示。
[/Quote]
寫數據時,我的程序確實有使用了事物。但這個操作的時間會非常短的。數據量也比較少
NBDBA 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tosp2012 的回复:]
謝謝各位的解答,程序在我的測試SQL上是沒有問題的。
但在應用服務器上的SQL就有上述的問題。
服務器放在香港,我想這不是問題的關鍵吧?
[/Quote]
测试服务器没有这么多用户并发誓不会产生问题的
Tosp2012 2011-08-05
  • 打赏
  • 举报
回复
謝謝各位的解答,程序在我的測試SQL上是沒有問題的。
但在應用服務器上的SQL就有上述的問題。
服務器放在香港,我想這不是問題的關鍵吧?

快溜 2011-08-05
  • 打赏
  • 举报
回复
分析你的查询语句,查看执行计划,时间浪费在哪里。
唐诗三百首 2011-08-05
  • 打赏
  • 举报
回复
楼主是什么生猛的程序要一次读取10W行记录?真有必要吗,前端处理得过来吗.

可以先在表名后加(nolock)试试: select * from table (nolock)

如果还有问题,就要详细分析原因了.例如查看执行计划.
NBDBA 2011-08-05
  • 打赏
  • 举报
回复
搂主第一步应该是将你的查询加with(nolock)提示测试。

你的情况还有一种可能是,你的内存设置不合理,没有设置SQL最大内存,这样运行时间久了以后,所有内存被占用,大数据量查询时需要与硬盘交换数据引起速度下降,这个检查并设置合适的最大内存数就可以了

另外,检查下一次返回10W数据的必要性,如果是给用户直接看的,一般几百条就看不过来了,如果是为了传给其他地方或者导出,那就没问题。
AcHerat 2011-08-05
  • 打赏
  • 举报
回复
楼主可能要去分析,跟踪看看,找到引起的具体因素。
NBDBA 2011-08-05
  • 打赏
  • 举报
回复
这个最可能的原因是锁,就是数据插入和更新诸塞了查询动作,最简单的解决方法是在查询时允许脏读,具体实现是在查询加with(nolock)提示。
Tosp2012 2011-08-05
  • 打赏
  • 举报
回复
初步估計問題的原因:
這臺服務器的數據是從其他服務器同步更新過來的,也許剛在同步這個表的時候,恰好客戶端要存取這個表的資料,導致客戶端出現等待(7、8分鐘)的情況。

現在的做法就是停止同步更新,測試幾天看是否還有同樣的問題發生。
Tosp2012 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 fredrickhu 的回复:]
引用 12 楼 perfectaction 的回复:
你的应用服务器和DB服务器在一个机房吗?
你的情况要具体分析,首先要排除网络情况
然后要看一下sql 内存使用情况,在查询变慢时,db server上的等待情况等等

支持大叔的说法 具体情况具体分析
[/Quote]
是的,具體問題具體分析。
1、首先,網絡是沒有問題的,因為出問題時,ping值很穩定30MS左右。
2、SQL的使用內存也沒發現有異常情況。
老潘 2011-08-05
  • 打赏
  • 举报
回复

跟踪一下,找出导致性能问题的原因
--小F-- 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 perfectaction 的回复:]
你的应用服务器和DB服务器在一个机房吗?
你的情况要具体分析,首先要排除网络情况
然后要看一下sql 内存使用情况,在查询变慢时,db server上的等待情况等等
[/Quote]
支持大叔的说法 具体情况具体分析

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧