-->

วันเสาร์ที่ 25 กุมภาพันธ์ พ.ศ. 2555

เทคนิคอื่นๆในการทำ Performance Tuning


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 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 ได้เหมือนกัน

9) ใช้ Disk RAID เพื่อเพิ่ม Performance

            ถ้ามีงบประมาณมากหน่อย ก็อาจจะนึกถึงการซื้อ Hardware RAID Disk ซึ่งจะได้ performance ที่ดีแน่นอน


ไม่มีความคิดเห็น:

แสดงความคิดเห็น