Я хотів би знати дві речі:
- як ви безпечно переміщуєте tempdb з мінімальним простоєм?
- скільки файлів tempdb вам потрібно?
Це 1 файл на ядро? Отже, quad core = 4 tempdb файли, створюючи три нові?
Я хотів би знати дві речі:
Це 1 файл на ядро? Отже, quad core = 4 tempdb файли, створюючи три нові?
Відповіді:
Щоб перемістити tempdb
файли, вам просто потрібно зробити наступне:
alter database tempdb
modify file
(
name = tempdev,
filename = 'C:\YourNewTempdbDir\tempdb.mdf'
)
go
alter database tempdb
modify file
(
name = templog,
filename = 'C:\YourNewTempdbDir\templog.ldf'
)
go
Якщо ви хочете додати новий файл tempdb
, вам просто потрібно зробити наступне (за умови, що ви хочете додати його до PRIMARY
групи файлів або створити свій власний):
alter database tempdb
add file
(
name = tempdb2,
filename = 'C:\YourNewTempdbDir\Tempdb2.ndf'
)
go
Щоб ці зміни набули чинності, вам потрібно буде перезапустити службу SQL Server. Що стосується скорочення часу простою, ви обмежуєтесь кількістю часу, яке знадобиться для перезавантаження служби . Не потрібно турбуватися про переміщення вже існуючих tempdb
файлів баз даних, оскільки SQL Server завжди відтворює файли, а нові місця / файли будуть створені при запуску служби.
Щодо "1 файлу даних tempdb на ядро", це багато в чому міф. Правильний підхід полягає у відстеженні tempdb
вмісту файлів для сторінок вільного простору (PFS), глобальної карти розподілу (GAM) та спільної глобальної карти розподілу (SGAM). Будь ласка, зверніться до цієї статті, щоб отримати запит (альтернативне посилання), який переглядає sys.dm_os_waiting_tasks
DMV, щоб побачити, скільки вмісту tempdb
файлів. Тоді вам потрібно відмовитися від цього, замість того, щоб просто зафіксувати tempdb
стільки ж файлів, скільки є ядра. Це більш доцільний підхід.
Щоб перемістити tempdb, виконайте:
ALTER DATABASE tempdb
MODIFY FILE ( name=tempdev, filename='D:\Newpath\tempdb.mdf')
GO
ALTER DATABASE tempdb
MODIFY FILE ( name=templog, filename='D:\Newpath\templog.ldf')
GO
Потім перезапустіть службу SQL Server (MSSQLServer).
Кількість файлів у tempdb - див. Статтю Пола Рендалла: міф про DBA SQL Server на день: (12/30) tempdb завжди повинен мати один файл даних на ядро процесора
З порад Microsoft :
Як правило, якщо кількість логічних процесорів менше або дорівнює 8, використовуйте таку ж кількість файлів даних, що і логічні процесори.
Якщо кількість логічних процесорів перевищує 8, використовуйте 8 файлів даних, а потім, якщо суперечка триває, збільшуйте кількість файлів даних на кратні 4 (до кількості логічних процесорів), поки суперечка не зменшиться до прийнятного рівня або зробіть зміни навантаження / код.
Переміщення файлів TempDB - це двоетапний процес:
SQL Server
службу для зміни вступили в силу (це мінімальний час простою вам потрібно)Щоб сказати SQL, де створити нові файли TempDB, ви можете використовувати:
DECLARE @newDriveAndFolder VARCHAR(8000);
SET @newDriveAndFolder = 'Z:\YourTempDBfolder';
SELECT [name] AS [Logical Name]
,physical_name AS [Current Location]
,state_desc AS [Status]
,size / 128 AS [Size(MB)] --Number of 8KB pages / 128 = MB
,'ALTER DATABASE tempdb MODIFY FILE (NAME = ' + QUOTENAME(f.[name])
+ CHAR(9) /* Tab */
+ ',FILENAME = ''' + @newDriveAndFolder + CHAR(92) /* Backslash */ + f.[name]
+ CASE WHEN f.[type] = 1 /* Log */ THEN '.ldf' ELSE '.mdf' END + ''''
+ ');'
AS [Create new TempDB files]
FROM sys.master_files f
WHERE f.database_id = DB_ID(N'tempdb')
ORDER BY f.[type];
Це призведе до створення тверджень T-SQL, які потрібно запустити для переміщення файлів до потрібного drive:\folder
вам нового . (натисніть на зображення, щоб збільшити розмір)
Після запуску рухомих операторів ви можете запустити вищезазначений запит ще раз, щоб перевірити, чи Current Location
стовпець тепер відображає ваш новий drive:\folder
.
Після того як ви задоволені своїми змінами, перезапустіть службу SQL Server .