1)
ใช้ Normalization เพื่อ Optimize
Transactional Process
การทำ Normalization
นั้น จะช่วยในมุมการใช้คำสั่ง Insert, Update, Delete ทำให้เกิด Performance ที่ดี เพราะจะช่วยขจัดปัญหา เรื่องการซ้ำซ้อนของข้อมูล
และลดโอกาสที่จะเกิดการผิดพลาดในการประมวลผลข้อมูลในตาราง แต่จะมีผลตรงกันข้ามกับคำสั่ง
Select เพราะว่าใน Database หลายๆ
ตัวที่อาจจะพบว่า Query เร็ว แต่ Insert ช้าก็ได้
2) แยกไฟล์ MDF และ LDF ไว้กันคนละ physical disk
โดยคำสั่ง Insert,
Update, Delete จะกระทำกับไฟล์ LDF เป็นหลัก
ทั้งนี้ในงาน multi-user ขนาดใหญ่แล้วจะเกิด load
read-write อยู่บน physical disk ก้อนเดียวกัน
ถ้าเป็นไปได้ก็ควรจะแยกไฟล์ MDF และ LDF ไว้คนละ physical disk ก็จะทำให้เกิดการแบ่ง load
read-write ไปไว้คนละ physical disk
3) แยก tempdb ไว้บน harddisk ก้อนใหม่
หลักการจะเหมือนกับการแยกไฟล์
MDF และ LDF ครับ คือการแยก load
แต่ tempdb จะเป็น temp สำหรับ
database ทุกก้อนที่อยู่ใน Server tempdb จะรับงานหนักมาก
ถ้าเป็นไปได้ก็ควรแยก tempdb ไว้คนบน physical disk ต่างหากได้จะดีมาก
4) สำหรับ table ขนาดใหญ่ให้ใช้ Table partition
สาเหตุหลักของการทำ
partitioning
มากจาก tables ที่มีขนาดใหญ่ (very
large tables and indexes) โดยทำการ แยกส่วนออกมาเป็นส่วนย่อยๆ
เรียกว่า partitions มองขนาดจากใหญ่ไปเล็กจะเป็นดังนี้
Tables->Partitions->Rowsโดยสามารถแบ่ง ข้อมูลออกเป็น range
ใช้ข้อมูลใน data เช่น ปี เป็นต้น
ตัวอย่าง
table Customer มีพนักงานปี 2008-2010 จาก Table Customer จะประกอบด้วย Partition คือ customer_2008, customer_2009, customer_2010 เป็นต้น โดยสามารถ Query โดยระบุว่าจะใช้ Patitioning ไหนเพื่อเพิ่มความเร็วในการ Query หรือ ระบุว่าใช้ Table customer เลยก็ได้ การทำ table partition เป็นการแยก load ทาง horizontal โดยจะทำได้ตั้งแต่ sql server 2005 ขึ้นไป เป็นวิธีการกระจาย load ที่ฉลาดมากที่สุดวิธีหนึ่ง โดยสามารถกำหนดเงื่อนไขในการแบ่ง table เช่น แบ่งตามปีที่ซื้อสินค้า, แบ่งตามแผนก เป็นต้น
table Customer มีพนักงานปี 2008-2010 จาก Table Customer จะประกอบด้วย Partition คือ customer_2008, customer_2009, customer_2010 เป็นต้น โดยสามารถ Query โดยระบุว่าจะใช้ Patitioning ไหนเพื่อเพิ่มความเร็วในการ Query หรือ ระบุว่าใช้ Table customer เลยก็ได้ การทำ table partition เป็นการแยก load ทาง horizontal โดยจะทำได้ตั้งแต่ sql server 2005 ขึ้นไป เป็นวิธีการกระจาย load ที่ฉลาดมากที่สุดวิธีหนึ่ง โดยสามารถกำหนดเงื่อนไขในการแบ่ง table เช่น แบ่งตามปีที่ซื้อสินค้า, แบ่งตามแผนก เป็นต้น
ข้อจำกัดในการใช้ Table
partition คือ
1. Data Type ที่ใช้สำหรับทำเป็นเงื่อนไขใน Partition Function ต่อไปนี้จะใช้ไม่ได้ครับ
เช่น text, ntext, image, xml, varbinary(max), varchar(max) และ Data type ที่สร้างมาจาก CLR
2. จำนวน partition
สูงสุดที่สร้างได้ก็คือ สามารถสร้างได้ไม่เกิน 1,000
partition (โดยส่วนตัวก็ไม่เคยใช้งานถึงครับ)
3. จำนวน boundary
ที่สร้างได้สูงสุดไม่เกิน 999
5) สำหรับ database ขนาดใหญ่ให้ใช้วิธีการแยกไฟล์ออกเป็นหลายๆ ไฟล์โดยใช้ File Group
หลักการจะเหมือนกับการทำ
partition table แต่เป็นระดับ Database แทน โดยการแยก table กระจายไปแต่ละ physical
disk แต่วิธีการแยกเราจะใช้ file group เป็นเหมือนการแบ่งกลุ่มให้กับข้อมูล
ซึ่งสามารถทำได้ทุกเวอร์ชั่นของ SQL Server
6) เมื่อใช้ Data type แบบ TEXT, NTEXT, IMAGE ให้แยกเก็บต่างหากจาก Table Storage
โดยปกติแล้วการเก็บข้อมูลของ
column ที่มี data type เป็น text,
ntext, image นั้นจะเก็บอยู่ใน page เดียวกับ column
อื่นๆ เพราะฉะนั้น เวลาใช้คำสั่ง select ก็จะทำให้
sql server ไปอ่าน column เหล่านี้ขึ้นมาด้วย
ซึ่งถือว่าเป็น column ที่พิเศษ ดังนันจึงควรจะทำการแยก column
ที่เป็น text, ntext, image แยกออกมาต่างหาก
เพื่อเพิ่ม performance โดยใช้คำสั่ง
EXEC sp_tableoption 'orders', 'text in row',
'ON'
7) พยายามใช้ constraint ที่เป้น built-in เช่น primary key, foreign key, check, default, unique แทนการเขียน trigger ขึ้นมาเอง
contraint ต่างๆ ที่มีอยู่แล้ว ทาง microsoft ได้ทำการทดสอบเรื่อง
performance มาเป็นอย่างดีอยู่แล้ว พยายามใช้ built-in
เป็นหลักเพื่อให้ได้ performance ที่ดี แต่ถ้า
built-in ที่มีอยู่
ไม่สามารถตอบสนองสิ่งที่เราต้องการได้จริงๆ ถืงจะเริ่มนึกถึงการเขียน trigger
ขึ้นมาใช้งานเองอีกทีนึง
8 ) แยก Index ไว้คนละ Physical Disk โดยใช้ File Group
การสร้าง index
จะทำให้การ access data ทำได้เร็ว
แต่ก็ควรที่จะแยก index ไว้คนละ physical disk โดยใช้ file group ได้เหมือนกัน
ไม่มีความคิดเห็น:
แสดงความคิดเห็น