Я після деякого підтвердження цієї ідеї виправити погано працюючу базу даних або кращі пропозиції, якщо хтось має. Завжди відкриті для кращих пропозицій.
У мене дуже велика база даних (20+ мільйонів записів зростає приблизно на 1/2 мільйони на день), які використовують GUID як ПК.
З мого боку нагляд, але ПК є кластеризованим на SQL сервері і викликає проблеми з продуктивністю.
Причина настанови - ця база даних частково синхронізована з 150 іншими базами даних, тому ПК повинен бути унікальним. Синхронізацією не керує SQL Server, скоріше існує вбудований процес, який підтримує синхронізацію даних з вимогами системи - все на основі цього GUID.
Кожна з 150 віддалених баз даних не зберігає повні дані, як вони зберігаються в центральній базі даних SQL. вони зберігають лише підмножину даних, які вони насправді потребують, а дані, які вимагають, не є унікальними для них (10 із 150 баз даних можуть мати деякі ті самі записи, наприклад, із баз даних інших сайтів - вони діляться). Крім того - дані фактично генеруються на віддалених сайтах - а не в центральній точці - отже, необхідність у GUID.
Центральна база даних використовується не лише для синхронізації всього, але запити від 3000+ користувачів виконуватимуться проти цієї дуже великої фрагментованої бази даних. Вже це велика проблема в початковому тестуванні.
На щастя, ми ще не живемо - тому я можу вносити зміни та приймати речі в режимі офлайн, якщо потрібно, що хоча б щось.
Продуктивність віддалених баз даних не є проблемою - підмножини даних досить малі, і база даних зазвичай ніколи не перевищує розмір понад 1 ГБ. Записи подаються в основну систему досить регулярно і видаляються з менших BD, коли це більше не потрібно.
Продуктивність центральної БД, яка зберігає всі записи, є жахливою - завдяки кластеризованому GUID як первинному ключу для багатьох записів. Фрагментація індексу виключається з діаграм.
Отже - мої думки вирішити проблему продуктивності - створити новий стовпець - Без підпису BIGINT IDENTITY (1,1), а потім змінити Clustered PK таблиці BIGINT.
Я б створив унікальний індекс без кластера в полі GUID, який був первинним ключем.
Менші віддалені 150 баз даних не повинні знати про новий ПК в базі даних Центрального сервера SQL - його суто буде використовуватися для організації даних у базі даних та зупинки поганої продуктивності та фрагментації.
Чи вдасться це покращити продуктивність центральної бази даних SQL і запобігти подальшому фрагментації індексу (певною мірою)? чи я пропустив щось дуже важливе тут, яке збирається стрибнути і кусати мене і викликати ще більше горя?
int
за 4255 днів (11,5 років). Якщо він це зробив, він звинуватив би вас лише через 11,5 років;)