Archive for November, 2011


เวลาเราเรียกใช้งาน SQL Server Management Studio (SSMS) จะพบว่า SQL Server นั้นมี database สร้างไว้อยู่แล้ว 4 DB เราจะเรียก DB เหล่านี้ว่า System Database ซึ่งประกอบไปด้วย

Master

    – เป็น database หลัก จะเป็นที่เก็บค่าคอนฟิกของ SQL server เช่น Instance configuration, login, linked server เป็นต้น และจะเป็น database ตัวแรกที่ถูกโหลดขึ้นมาเวลา SQL Server ทำงาน
    – ซึ่งถ้า Master database corrupt ล่ะก็ start service ไม่ขึ้นกันทีเดียว ดังนั้นแนะนำให้ backup Master database ไว้เป็นระยะๆ ด้วยนะครับ

TempDB

    – ตามชื่อเลยครับ เป็น database ชั่วคราว เช่นเป็นที่อยู่ของ temporary tables, พี่พัก result ที่ได้ระหว่าง join หลายๆ table, ที่พักตอน sort, row version สำหรับงาน snapshot
    – โดย TempDB จะถูกเคลียร์ที่ครั้งที่ SQL server start ดังนั้นจึงไม่จำเป็นต้อง backup TempDB
    – และเพื่อให้ SQL server ทำงานได้เร็วขึ้น แนะนำให้ย้าย TempDB ไปไว้ใน disk ลูกที่เร็วที่สุดครับ

Model

    – เป็น template database เช่นถ้าอยากให้ database ใหม่ที่สร้างหลังจากนี้มี table, store procedure, user หรืออื่นๆ อยู่ในทุก database ก็ให้มาสร้าง object เหล่านั้นไว้ใน Model database แต่จะไม่มีผลกับ database ที่เคยสร้างไว้ก่อนหน้าแล้วนะครับ มีผลกับของใหม่เท่านั้น

MSDB

    – ใช้เก็บคอนฟิกของ SQL Agent, SSIS package (หรือ DTS package ในสมัย SQL 2000) นอกจากนี้ยังเก็บข้อมูลประวัติ backup ไว้ด้วย ซึ่งจะมีประโยชน์มากเวลาต้องการรู้ว่า database ไหน backup ไปเมื่อไหร่

นอกจากนี้ยังมี system database อื่นๆ อีกขึ้นอยู่กับว่าได้ติดตั้งและใช้งานฟีเจอร์อื่นๆ หรือไม่ เช่น Resource, Distribution และ ReportServer

Advertisement

Microsoft SQL Server ยอมให้เรามี SQL Server Service หลายๆ ตัวได้ในเครื่องเซิร์ฟเวอร์เดียวกัน โดยใช้ฟีเจอร์ที่ชื่อว่า Named Instance ซึ่งเราสามารถตั้งชื่อ SQL instance แต่ละตัวแยกกันได้ โดยการเรียกใช้จะเป็น “ServerName\InstanceName” ซึ่งจะพ่วงชื่อ instance มาด้วย ต่างกับ default instance ที่อ้างแค่ชื่อเซิร์ฟเวอร์เปล่าๆ แบบนี้ “ServerName”

สำหรับการตั้งชื่อนั้นทำได้ตั้งแต่ตอนที่ติดตั้ง SQL Server โดยหากไม่ระบุ named instance จะได้ชื่อ instance เป็น MSSQLSERVER ซึ่งก็คือ default instance หรือชื่อเซิร์ฟเวอร์เปล่าๆ นั่นเอง และหากต้องการ instance เพิ่มก็แค่รัน setup.exe ซ้ำอีกครั้ง แล้วก็เลือกชื่อ instance ที่ไม่ซ้ำกับของเดิมครับ

ข้อควรระวังสำหรับผู้ใช้งาน SQL Express Edition
SQL Express Edition จะต่างกับของเสียเงินนิดนึงหากไม่ระบุชื่อ instance จะสร้าง named instance ที่ชื่อว่า SQLExpress ให้อัตโนมัติ ดังนั้นเวลาใช้งานก็ต้องอ้างเป็น “ServerName\SQLExpress” แต่ถ้าอยากได้ default instance ใน SQL Express Edition ก็ให้เลือกตั้งชื่อเป็น MSSQLSERVER แทน ก็จะได้ default instance เวลาใช้งานสามารถอ้างเป็นชื่อเซิร์ฟเวอร์เปล่าๆ ได้เลยครับ

ข้อดีของการมีหลาย SQL Instance ในเครื่องเดียว
1) สามารถติดตั้ง SQL Server ได้หลายเวอร์ชั่น หลาย Edition ในเซิร์ฟเวอร์เครื่องเดียวกัน เช่น
    1a) มี SQL 2008 R2 Standard สำหรับงาน production และมี SQL 2008 Express สำหรับทำเป็นระบบทดสอบในเครื่องเดียว
    1b) บางโปรแกรมต้องกำหนด collation พิเศษ ซึ่งอาจส่งผลกระทบต่อ database อื่นในกรณีที่มี instance เดียวได้
2) การบริหารจัดการและดูแลรักษาของแต่ละ Named Instance แยกจากกัน
    เช่น เวลาแพตช์ SQL Express ต้องมี downtime ก็ทำได้ โดยอีก instance ที่เป็น SQL Standard ก็ยังทำงานได้ตามปกติ

แล้วข้อควรระวังของหลาย instance ล่ะ
1) ใช้ทรัพยากรของเครื่องเซิร์ฟเวอร์มากกว่า มีหลาย database แต่ใช้ Instance เดียว
2) ต้องระวังเรื่อง Disk I/O throughput และ Network Bandwidth ของ instance ที่ใช้งานสูงอาจกระทบกับ instance อื่นได้
3) ภาระบริหารจัดการจะสูงขึ้นเพราะต้องดูแลหลายที่ เช่น แพตช์, login, permission ก็ต้องทำหลายที่
4) การคิด license
    4a) SQL 2005 – เฉพาะ processor license และ Enterprise server license ที่สามารถทำหลาย instance โดยไม่ต้องซื้อเพิ่มได้
    4b) SQL 2008 – ทั้ง processor license และ server license ไม่ว่าจะ edition ไหน ก็สามารถทำหลาย instance โดยไม่ต้องซื้อเพิ่มได้ อ่านเพิ่ม ที่นี่
    4c) SQL 2008 R2 – ยังไม่มีข้อมูล
    ดังนั้นเรื่อง License แนะนำให้ปรึกษากับไมโครซอฟท์หรือคนขายก่อนจะดีกว่าครับ