สวัสดีครับผมเป็นนักศึกษาไปฝึกงาน
ได้รับมอบหมายให้ศึกษาวิธีทำให้ database ที่ใช้ MS server 2005 สามารถ query ได้เร็วขึ้น (เพราะหลายครั้ง query แล้ว timeout)
ส่วนที่ทำให้เกิดปัญหาหลักๆ
- table ประมาณ 5 อันที่มี record ประมาณ 400k+
- เวลาเรียกใช้ จะมีการเรียกใช้โดย ผ่าน view หรือดู table โดยตรง ซึ่งจะมีการ join กัน
ลักษณะการใช้
- readonly
- ข้อมูลจะเพิ่มขึ้นตามเวลา (จะมีบริษัทที่ outsource มีเทข้อมูลใส่ให้ครับ)
- ข้อมูลที่เก็บตั้งแต่ปี 2004
- การเรียกดูส่วนใหญ่จะเรียกดูข้อมูลใน 3 ปี ล่าสุด
เท่าที่ผม search ดู
SQL Profiler and the Index Tuning Wizard น่าจะช่วยได้ (ไม่ทราบใครเคยใช้บ้างครับ มันมีแถมมาจาก MS server 2005 หรือเปล่าครับ)
แต่เพื่อนบอกว่า ไม่แน่ใจว่าใน DB ที่ใหญ่ขนาดนี้ การทำ index จะช่วยได้แค่ไหนครับ
ใครมีคำแนะนำอะไรโปรดบอกผมทีนะครับ ขอบคุณมากครับ
on
ทำ INDEX
paepod Mon, 20/04/2009 - 07:26
ทำ INDEX เลยครับผม ช่วยได้แน่นอน ที่เหลือ รอท่านอื่นมาตอบ
ดู search criteria
tekkasit Mon, 20/04/2009 - 09:14
ดู search criteria กับ data profile เพื่อวิเคราะห์ว่าจะทำ index กับรายการอะไรบ้าง ซึ่งมีทางเลือกระหว่าง compound index กับ index บนหนึ่งฟิลด์ แต่มีหลายๆตัว
ในกรณีนี้ ระบบมันเป็น read-only แบบ warehouse ใส่ index ได้เยอะ ผลกระทบน้อย แต่ถ้าเป็นระบบที่เป็น operation มีการอัพเดทบ่อยๆ ใส่ index เยอะๆ ระดับสิบตัวขึ้นไป นี่มีผลกระทบบ้าง
ในรุ่น SQL Server 2005 รองรับการทำ partitioning แล้ว ลองดูว่าจะใช้คีย์อะไรในการทำการแบ่งข้อมูล เช่น ปีของข้อมูล
ลองดูว่าส
ZiiT Mon, 20/04/2009 - 09:26
ลองดูว่าส่วนใหญ่ Where Cause ที่ใช้ตกลงบน Key ที่มี Index อยู่รึป่าวครับ ถ้าไม่มีก็เพิ่ม Index น่าจะช่วยได้
แล้วก็ลองมองเรื่อง Cluster Index ว่า ส่วนใหญ่ถ้าเปลี่ยนการจัดเรียงของ Physical จะช่วยได้มั๊ย อันนี้ขึ้นอยู่กับลักษณะของการ Select ว่า Cluster Index บน Key อะไรช่วยให้เกิดประสิทธิภาพมากที่สุดครับ :)
อีกเรื่องนึง ลองดูเรื่องความถูกต้องของข้อมูล พวก Isolation Level ซึ่งบาง Statement เราอาจจะเพิ่ม with (nolock) (สำหรับ MSSQL)เข้ามาช่วยได้อาจจะทำให้ทำงานำได้เร็วขึ้นครับ (แต่อันนี้อาจจะไปกระทบกับส่วน Develop)
Index ครับ
NgOrXz Mon, 20/04/2009 - 18:13
Index ครับ ช่วยได้เยอะครับ
©NgOrXz™®
แมนเชสเตอร์ยูไนเต็ด เก่งที่สุดในโลก
ที่นี่เลย
khajochi Mon, 20/04/2009 - 18:26
ที่นี่เลยครับ -> กฎการ select ข้อมูลจาก table ใหญ่ ๆ ในฐานข้อมูล mysql
---
Khajochi Blog : It's not a Bug ... It's a Feature
กฎการ select
crucifier Mon, 20/04/2009 - 18:47
กฎการ select ข้อมูลจาก table ใหญ่ ๆ ในฐานข้อมูล mysql
ขอบคุณมาก
eigx Tue, 21/04/2009 - 21:39
ขอบคุณมากครับ
http://th.wikipedia.org/wiki/
jane Wed, 22/04/2009 - 01:20
http://th.wikipedia.org/wiki/คลังข้อมูล
ถ้ามี h/w (disk)
godzilla Mon, 04/05/2009 - 08:20
ถ้ามี h/w (disk) เยอะ กระจาย i/o ให้มากๆ
ถ้ามีการ sort สังเกต tempdb ให้ดีๆ ว่าเพียงพอหรือไม่
อยู่บน disk ลูกเดียวกับ data หรือไม่
พึงระลึกไว้เสมอว่า performance tuning ไม่เสร็จในครั้งเดียว
ต้องทำและสังเกตผลอย่างต่อเนื่อง