日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

性能优化实战案例——助力某移动OA系统

發布時間:2025/3/15 windows 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 性能优化实战案例——助力某移动OA系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

  最近連續接觸了4個OA系統,均存在著不同的性能問題,本文記述對某移動OA系統的優化全過程,讓看官們對數據庫優化流程有一個了解,并揭開隱式轉換這無情殺手的神秘面紗。

  本文使用的工具:SQL專家云平臺專業體檢工具?:www.zhuancloud.com

系統情況

  硬件配置

  

  

  軟件情況

  

?

  數據庫情況

  

?

  系統情況可以看出,這是一個較小型的OA系統數據大小70G,硬件配置較為普通2路16CPU、48G內存,數據庫為2008R2版本。

數據庫指標

  我們來看一下數據庫的性能相關情況:數據是從早上九點半到晚上8點的數據

  每秒請求數:

  

  用戶連接數

  

  慢語句數量

  

  系統等待情況

  

  等待時間

  

  

  CPU、內存、磁盤指標一切正常,還有很多指標,這里就不貼圖了。

  其實看到這里,大多數看官可以得出結論,硬件指標正常,阻塞這么嚴重,系統的慢主要是因為阻塞!并且語句運行時間長也是因為阻塞的時間長!

?

  我的猜測

  OK 沒問題就是這樣的定位,同樣我們看到大量的阻塞類型是LCK_M_IS、LCK_M_S、LCK_M_U ·····有了這樣的定位,我可以猜測到,系統中一定有update語句不優化或太過頻繁(OA這樣的系統一般不會特別頻繁,所以一定是不優化),而且設計核心的查詢語句經常被阻塞(如果不是核心功能慢,用戶也不會這樣大叫!),而且80%的可能這部分核心查詢也不夠優化!

?

問題診斷

  帶著我的猜測我們看一下核心的一些語句:

  

?

?

  很多語句都類似,看到這樣的簡單語句(都是基本的查詢幾個字段一個where條件),我就知道問題其實一定很簡單!

  如此簡單的語句設計那么跑出來是多長時間呢?

  

?

  很多人想到著一定是缺失索引,這樣關鍵的where 條件上沒有索引!!!!!

  看一下結構:

  

?

?  

?

?

  這個表是一個有280萬數據的表,而不是像我們想象的那樣缺失索引,相反where字段上的條件是一個聚集索引!!(其實如果只是條件單純的缺失索引,技術人員怎么可能發現不了?)

?

  整個系統其他問題不大,也就是說明,系統經過優化,程序設計的也很好,沒有那種非常復雜的SQL,都是拆成一步一步很簡單SQL,也就是說明這其中的技術人員水平還是很可以的!

  那么問題來了,這是啥問題導致的?

  可能出現的情況是:

  1.我這條簡單語句不缺少索引,而且單獨在數據庫跑很快很快(這是一定的)

  2.我系統中阻塞的這么嚴重,是不是有什么地方我沒發現?怎么這樣的語句會阻塞的這么狠?

  3.是不是我服務器有什么問題了?

  

  在創意粘性的一本書中寫到“指揮官意圖”相關,其中有一個比喻就和這個很接近,如果排除其他干擾,就只是看這樣簡單的語句為什么慢?這樣我們就是意圖明確,排除干擾,很快我們就會想到“隱式轉換”導致索引不能使用的情況,但是正是因為上面的一些問題干擾,我們可能會被引導到,是不是服務器的問題,是不是阻塞情況我們有分析清呢?沒有太多辦法,數據庫本身就是這樣一個復雜的東西,各種因素的組合排查是最考驗從業者的智慧的。

?

  回到正題,“隱式轉換”確實是一個寫程序的人員很難發現的東西,因為我寫出的語句很快,到數據庫跑的時候慢,這我可不知道。

  如果不知道什么是隱式轉換,請參見:SQL SERVER中隱式轉換的一些細節淺析

  但我們通過工具很清楚的分析出“隱式轉換”

  

  

?

  在之前的表定義中,我們可以看出表的字段類型為varchar,而傳入的參數是nvarchar(從隱式轉換的提示中得知)

  

?

  支持一個簡單的問題得到定位,解決起來也是非常容易的,下面給出幾個隱式轉換的常見解決方式:

  1.程序定義字段類型與表定義不相符(優先級高于表定義類型),直接修改參數設定類型

  2.程序沒有定義類型比如java程序定義string ,而驅動自動翻譯成nvarchar ,這樣一般可以在程序加入強制轉換 如 “where a = @a?” 改寫成 “where a = cast(@a as varchar(自定義長度))”

  3.程序如果很難修改,或第三方開發,可以直接修改表字段類型?

性能對比

  經過1天的簡單優化程序性能得到明顯改善

  優化前

  

  優化后

  

?

  優化前

  

  優化后

  

?

--------------博客地址---------------------------------------------------------------------------------------

博客地址?http://www.cnblogs.com/double-K/

?

?歡迎轉載,請注明出處,謝謝!

-----------------------------------------------------------------------------------------------------

?

  總結 : 文章只是簡單的描述了一下某移動公司OA優化的過程,主要講述了隱式轉換部分的發現與處理,其他部分的優化都是常見手段請參見其他文章。

    SQL SERVER全面優化-------Expert for SQL Server 診斷系列

  

    關于隱式轉換的文章:SQL SERVER中隱式轉換的一些細節淺析

?----------------------------------------------------------------------------------------------------

注:此文章為原創,歡迎轉載,請在文章頁面明顯位置給出此文鏈接!
若您覺得這篇文章還不錯請點擊下右下角的推薦,非常感謝!

?

轉載于:https://www.cnblogs.com/double-K/p/6296320.html

總結

以上是生活随笔為你收集整理的性能优化实战案例——助力某移动OA系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。