即時查詢/命令修改
我負責管理一個 SQL Server 200x 實例,該實例不幸地充當了一個交鑰匙應用程序的後端,該應用程序具有令人作嘔的性能問題。它重複使用準備靜態游標的模式,它只會使用前幾個條目,並且通常需要幾十毫秒。連續流中有數千個這樣的查詢。
事情的真相是,由於應用程序數據完整性的奇怪設計對於任何這些查詢都不是問題,因此它們是靜態的事實是悲慘的,因為如果它們是,性能將快大約三十倍動態的。
在與供應商打交道數週後,我一無所獲。事實上,我真正需要做的只是改變應用程序使用 sp_cursorprepexec 的方式中的一個參數。如有必要,我什至可以在整個伺服器上以全域方式執行此操作。
我正在研究所有解決方案,無論是使用 SQL Server 200x 中我無法找到的功能,還是編寫一個位於 SQL Server 和客戶端之間的小型應用程序並修改數據(儘管我不會期待弄清楚如何以這種方式處理 TDS 協議),或者以某種方式重命名 sp_cursorprepexec 並用包裝器替換它。
天空是極限。
(僅供參考,我們現在正在執行 SQL Server 2005,但如果有令人信服的理由支付額外的錢來升級許可證,它可能會發生。)
這不是技術問題,而是契約管理問題。不要使用交鑰匙應用程序。它為供應商提供了一張越獄卡,允許他們忽略他們的服務水平協議。
任何一個,
- 將硬體扔到問題上(SSD、更大的伺服器、更多的 RAM 等),或者
- 與管理與您的供應商關係的任何人交談。將系統性能的責任推回給供應商,和/或
- 調查轉向競爭對手產品的商業案例。
弄亂應用程序是您應該做的最後一件事,尤其是在與供應商的關係變得緊張的情況下。
您需要確保您的管理層知道性能問題取決於系統的架構。以某種方式把它寫下來;寫一份報告,描述問題以及您無法單方面解決問題的原因。確保它已通過電子郵件發送給您的所有內部利益相關者,並且您有發送它的記錄。安排一個會議跟進並解釋它。這涵蓋了你的屁股 - 如果供應商(或授權購買的一方)試圖獲得政治,這非常重要。
現在,通過您的 IT 管理職能上報問題,確保其有據可查。當您了解問題的根本原因時,這應該不是問題。供應商向您出售了一個不適合用途的系統。現在是管理問題。點亮藍色觸摸紙並退後。
如果您已經這樣做了,那麼您已經完成了所有可以做的事情,而不會干擾應用程序本身。再說一次,我不能說得足夠強烈:不要對應用程序做任何可能使 SLA 無效的事情。