我有生成快照數據庫,將其轉換爲XML,然後存儲一個單獨的數據庫中的XML的項目。不幸的是,這些快照變成了巨大的文件,現在每個大約10兆字節。幸運的是,我只有把它們存放一個月左右,他們可以再次但是仍然被丟棄之前,快照一個月轉出成爲真正的壞了它的性能...
我覺得這是提高性能很多辦法。不,不是將XML存儲在某個單獨的文件夾中,因爲我沒有對該服務器上任何位置的寫入權限。 XML必須保留在數據庫中。但不知何故,該領域[內容]可能會以某種方式進行優化,所以事情會加快......
我不需要在此字段上的任何全文搜索選項。我絕不會根據這個領域進行任何搜索。所以也許通過禁用這個領域的搜索指示或任何?
該表沒有對其他表的引用,但結構是固定的。我無法重命名或更改字段類型。所以我想知道優化是否仍然有可能。
恩,是嗎?
的結構,如SQL Server生成:優化的表與一個巨大的文本字段
CREATE TABLE [dbo].[Snapshots](
[Identity] [int] IDENTITY(1,1) NOT NULL,
[Header] [varchar](64) NOT NULL,
[Machine] [varchar](64) NOT NULL,
[User] [varchar](64) NOT NULL,
[Timestamp] [datetime] NOT NULL,
[Comment] [text] NOT NULL,
[Content] [text] NOT NULL,
CONSTRAINT [PK_SnapshotLog]
PRIMARY KEY CLUSTERED ([Identity] ASC)
WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON,
FILLFACTOR = 90) ON [PRIMARY],
CONSTRAINT [IX_SnapshotLog_Header]
UNIQUE NONCLUSTERED ([Header] ASC)
WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON,
FILLFACTOR = 90)
ON [PRIMARY],
CONSTRAINT [IX_SnapshotLog_Timestamp]
UNIQUE NONCLUSTERED ([Timestamp] ASC)
WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON,
FILLFACTOR = 90)
ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
性能不只是選擇從該表中的數據時,也減緩選擇或在此數據庫中的其它表的一個插入數據時!當我從這張表中刪除所有記錄時,整個系統很快。當我開始添加快照時,性能開始下降。大約30次快照後,性能變差,連接超時的風險增加。
也許問題不在於數據庫本身,儘管通過管理工具使用它仍然很慢。 (當快照爲空時快速)。我主要使用ASP.NET 3.5和Entity Framework連接到此數據庫,然後讀取多個表。也許有些性能可以在這裏獲得的,儘管這無法解釋爲什麼該數據庫還從管理工具慢,並通過與直接連接其他應用程序使用時...
如果在數據庫結構中不允許更改,那麼只能在查詢時完成更改。即使沒有必要,您的查詢是否正在讀取[內容]字段? – Puneet 2011-03-04 11:38:51
我仍然可以更改字段的選項,而不是字段名稱或類型。具有結構,我只是指名稱,索引和字段... – 2011-03-04 11:45:39
當您從命令行直接執行數據庫操作時,您是否可以驗證性能是否較慢?通過ID選擇特定的記錄?我可以想到爲什麼只有30條記錄(即使是大數據)會導致SQL服務器的性能問題。文本數據不會與SQL Server中的記錄存儲在同一個頁面中,它對記錄訪問速度應該幾乎沒有影響或沒有影響。你的訪問方法(實體框架)很可能要求它不需要的東西,例如當不需要它時使用「SELECT *」或獲取它不需要的記錄。 – 2011-03-04 13:10:06