ย้ายและสร้างไฟล์ tempdb ใหม่อย่างปลอดภัย


21

สองสิ่งที่ฉันอยากรู้

  • คุณจะย้าย tempdb อย่างปลอดภัยได้อย่างไรด้วยการหยุดทำงานน้อยที่สุด
  • คุณต้องการไฟล์ tempdb กี่ไฟล์

มันคือ 1 ไฟล์ต่อคอร์? ดังนั้นควอดคอร์ไฟล์ 4 tempdb สร้างไฟล์ใหม่สามไฟล์?

คำตอบ:


22

ในการย้าย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_tasksDMV เพื่อดูว่ามีtempdbข้อขัดแย้งของไฟล์เท่าใด จากนั้นคุณต้องออกไปข้างนอกแทนที่จะทำแค่tempdbการลบไฟล์ที่มีจำนวนเท่ากันกับที่มีแกนภาพ เป็นวิธีที่แนะนำให้เลือกมากกว่า


8
  1. ในการย้าย 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)

  2. จำนวนไฟล์ใน tempdb - ดูบทความของ Paul Randall: ตำนาน SQL Server DBA ต่อวัน: (12/30) tempdb ควรมีไฟล์ข้อมูลหนึ่งไฟล์ต่อตัวประมวลผลหลัก


4

จากคำแนะนำของ Microsoft :

ตามกฎทั่วไปหากจำนวนตัวประมวลผลเชิงตรรกะน้อยกว่าหรือเท่ากับ 8 ให้ใช้ไฟล์ข้อมูลจำนวนเดียวกันกับตัวประมวลผลเชิงตรรกะ

หากจำนวนตัวประมวลผลเชิงตรรกะมากกว่า 8 ให้ใช้ไฟล์ข้อมูล 8 และจากนั้นหากการโต้แย้งดำเนินต่อไปให้เพิ่มจำนวนไฟล์ข้อมูลด้วยทวีคูณของ 4 (จนถึงจำนวนตัวประมวลผลเชิงตรรกะ) จนกว่าการโต้แย้งจะลดลงถึงระดับที่ยอมรับได้ เปลี่ยนเป็นภาระงาน / รหัส

การย้ายไฟล์ TempDB เป็นกระบวนการ 2 ขั้นตอน:

  1. บอก SQL ว่าคุณต้องการให้ไฟล์ TempDB ใหม่ของคุณไปที่ใด (ไม่มีเวลาหยุดทำงาน)
  2. รีสตาร์ท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คุณต้องการ (คลิกที่ภาพเพื่อทำให้ใหญ่ขึ้น)

อิมเมจแสดง 2 แถวพร้อมรายละเอียดเกี่ยวกับไฟล์ TempDB และคำสั่ง T-SQL เพื่อย้าย

เมื่อคุณเรียกใช้ข้อความเคลื่อนไหวของคุณคุณสามารถเรียกใช้แบบสอบถามด้านบนอีกครั้งเพื่อตรวจสอบว่าCurrent Locationคอลัมน์แสดงใหม่ของคุณdrive:\folderแล้ว

ภาพแสดงตำแหน่งใหม่ของไฟล์ TempDB

เมื่อคุณพอใจกับการเปลี่ยนแปลงของคุณแล้วให้เริ่มบริการ SQL Serverใหม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.