Mamy bardzo dużą bazę danych WriteDB
, która przechowuje surowe dane handlowe i używamy tej tabeli do szybkiego zapisu. Następnie za pomocą skryptów sql importuję dane z WriteDB
do ReadDB
w stosunkowo tej samej tabeli, ale rozszerzonej o dodatkowe wartości + relacje dodane. Skrypt importowania wygląda następująco:INSERT INTO idzie znacznie wolniej z czasem w SQL Server 2012
TRUNCATE TABLE [ReadDB].[dbo].[Price]
GO
INSERT INTO [ReadDB].[dbo].[Price]
SELECT a.*, 0 as ValueUSD, 0 as ValueEUR
from [WriteDB].[dbo].[Price] a
JOIN [ReadDB].[dbo].[Companies] b ON a.QuoteId = b.QuoteID
Początkowo jest to około 130 mil. wiersze w tej tabeli (~ 50 GB). Każdego dnia niektóre z nich dodawały, niektóre z nich zmieniały się, więc teraz decydujemy się nie komplikować logiki i po prostu ponownie zaimportować wszystkie dane. Problem polegający na tym, że z jakiegoś powodu ten skrypt działa dłużej i dłużej na prawie takiej samej ilości danych. Pierwsze uruchomienie trwa ~ 1h, teraz jest już zajęta 3h
Również SQL Server po imporcie działa niezbyt dobrze. Po zaimportowaniu (lub podczas niego), jeśli próbuję uruchomić różne zapytania, nawet najprostsze często zawodzą z błędami limitu czasu.
Jaki jest powód takiego złego zachowania i jak to naprawić?
Jest w tym dwa elementy - INSERT i SELECT. Sprawdź, który to jest, po prostu uruchom SELECT. –
Ile pamięci ma serwer? Może się zdarzyć, że zestaw roboczy przekroczy pamięć stopniowo w czasie. – usr
@usr Serwer ma 64GB pamięci RAM, 55 GB adresowane do serwera SQL. Cała dostępna pamięć używana przez MS SQL. Typ dysków - myślę, że HDD. Ale konfiguracja serwera nie zmieniła się z czasem - więc nie mogę zrozumieć tego spadku wydajności. – Ph0en1x