Di chuyển an toàn và tạo tập tin tempdb mới


21

Hai điều tôi muốn biết:

  • Làm thế nào để bạn di chuyển tempdb một cách an toàn với thời gian chết tối thiểu?
  • bạn cần bao nhiêu tập tin tempdb?

Có phải 1 tệp cho mỗi lõi? Vì vậy, quad-core = 4 tệp tempdb, tạo ba cái mới?

Câu trả lời:


22

Để di chuyển tempdbtập tin, bạn chỉ cần làm như sau:

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

Nếu bạn muốn thêm một tệp mới vào tempdb, bạn chỉ cần thực hiện các thao tác sau (miễn là bạn muốn thêm nó vào PRIMARYfilegroup hoặc tạo tệp của riêng bạn):

alter database tempdb
add file
(
    name = tempdb2,
    filename = 'C:\YourNewTempdbDir\Tempdb2.ndf'
)
go

Để những thay đổi này có hiệu lực, bạn sẽ cần khởi động lại dịch vụ SQL Server. Vì vậy, khi giảm thiểu thời gian chết, bạn sẽ bị hạn chế về thời gian cần thiết để khởi động lại dịch vụ . Bạn không phải lo lắng về việc di chuyển trướctempdb tệp cơ sở dữ liệu , vì SQL Server luôn tạo lại các tệp và các vị trí / tệp mới sẽ được tạo khi khởi động dịch vụ.

Đối với "1 tệp dữ liệu tempdb trên mỗi lõi", đó phần lớn là một huyền thoại. Cách tiếp cận đúng là theo dõi sự tempdbtranh chấp tệp cho các trang Không gian trống của Trang (PFS), Bản đồ phân bổ toàn cầu (GAM) và các trang Bản đồ phân bổ toàn cầu chung (SGAM). Vui lòng tham khảo bài viết này để có được một truy vấn (liên kết thay thế) xem qua sys.dm_os_waiting_tasksDMV để xem có bao nhiêu sự tempdbtranh chấp tập tin. Sau đó, bạn cần phải loại bỏ điều này, thay vì chỉ xóa tempdbvới cùng số lượng tệp như có lõi. Đó là cách tiếp cận được khuyến khích hơn.


8
  1. Để di chuyển tempdb, thực hiện:

    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

    Sau đó khởi động lại Dịch vụ máy chủ SQL của bạn (MSSQLServer).

  2. Số lượng tệp trong tempdb - xem bài viết của Paul Randall: Huyền thoại DBA của SQL Server mỗi ngày: (12/30) tempdb phải luôn có một tệp dữ liệu cho mỗi lõi bộ xử lý


4

Từ lời khuyên của Microsoft :

Theo nguyên tắc chung, nếu số lượng bộ xử lý logic nhỏ hơn hoặc bằng 8, hãy sử dụng cùng số lượng tệp dữ liệu làm bộ xử lý logic.

Nếu số lượng bộ xử lý logic lớn hơn 8, hãy sử dụng 8 tệp dữ liệu và sau đó nếu tiếp tục tranh chấp, hãy tăng số lượng tệp dữ liệu lên bội số của 4 (tối đa số lượng bộ xử lý logic) cho đến khi sự tranh chấp giảm xuống mức chấp nhận được hoặc thực hiện thay đổi khối lượng công việc / mã.

Di chuyển các tệp TempDB là một quá trình gồm 2 bước:

  1. SQL biết chính xác nơi bạn muốn các tệp TempDB mới của mình đi đến (điều này không có thời gian chết)
  2. Khởi động lại các SQL Serverdịch vụ để thay đổi có hiệu lực (đây là thời gian chết tối thiểu bạn cần)

Để cho SQL biết nơi tạo các tệp TempDB mới, bạn có thể sử dụng:

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];

Điều này sẽ tạo ra các câu lệnh T-SQL mà bạn cần chạy để di chuyển các tệp sang tệp mới drive:\foldermà bạn muốn. (bấm vào hình ảnh để làm cho lớn hơn)

Hình ảnh hiển thị 2 hàng có chi tiết về tệp TempDB và câu lệnh T-SQL để di chuyển chúng

Khi bạn đã chạy các câu lệnh di chuyển của mình, bạn có thể chạy lại truy vấn trên, để kiểm tra xem Current Locationcột hiện đang hiển thị mới của bạn drive:\folder.

Hình ảnh hiển thị vị trí mới của tệp TempDB

Khi bạn hài lòng với các thay đổi của mình, hãy khởi động lại dịch vụ SQL Server .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.