記我真實的一段維護任務:程序查詢慢到最快也需要15秒?

程序報錯:開始的由於系統緩衝區空間不足或隊列已滿問題解決辦法

一般有2點原因:
a)系統內存不足,情況表現爲空閒數低於200以下,系統句柄數大的可怕,達到10幾W
b)TCP連接數不夠,嚴重的可能導致數據庫連接失敗,項目部同事之前也說過這樣的情況,就是此問題導致的,前提是物理內存/虛擬內存設定值都正常的情況下增加TCP連接數(可能是你留作種的原因,所以tcp的端口(UserPort)請求已經達到你pc上本地設置的界限(MaxUserPort),默認的一般比較小,正廣和的這臺機器可能需要活動的TCP數量太多,所以需要設置大點),可以試着修改此鍵值,方法如下:
啓動註冊表編輯器,在註冊表中,找到以下子項,然後單擊 $參數(Parameters 翻譯過來就是>>參數<<的意思) HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
在編輯菜單中,單擊新建,然後添加以下註冊表項:
值名稱: MaxUserPort
值類型: 雙字節
值數據: 65534
有效範圍: 5000-65534 (十進制)
默認值: 0x1388 (5000 十進制)
退出註冊表編輯器,然後重新啓動計算機。
2、針對一般的數據庫,具有以下幾點優化法則
  • 1、減少數據訪問(減少硬盤訪問,這個就是我們程序的事了,項目由於是老的項目,還是ASP.NET編寫的,考慮到改源碼起來麻煩,所以後面我經過仔細分析增加了索引)

  • 2、返回更少的數據(減少網絡傳輸或磁盤訪問)

  • 3、減少交互次數

  • 4、減少服務器CPU及內存開銷

  • 5、利用更多的資源(增加資源)

一般處理這樣的情況,
  • 一、修改SQL語句,由於項目太老,更改源碼麻煩,所以我採用了增加索引,建立索引的優點:(1.大大加快數據的檢索速度; 2.創建唯一性索引,保證數據庫表中每一行數據的唯一性; 3.加速表和表之間的連接; 4.在使用分組和排序子句進行數據檢索時,可以顯著減少查詢中分組和排序的時間)

  • 二、增加索引(聚集索引和唯一索引),在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。一個表只能包含一個聚集索引。 如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的數據訪問速度。唯一索引,針對經常查詢的字段,客戶那邊告訴我,有時間、工號和分機號。我主要對這三個經常的字段進行了增加索引。

  • 建立索引的語法:CREATE 索引名稱 ON 表名(需要創建索引的字段);

經過這樣的調優,速度最慢也可以1秒就查詢出來了。好了,以上就是問題的解決方法和我個人的一些經驗分享。

本文出自思考者日記網,轉載請保留此出處!原文地址:http://www.shuyangyang.com.cn/jishuliangongfang/shujuku/2014-03-18/197.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章