10-1
2110422 การออกแบบระบบการจัดการฐานขอมูล ภาควิชาวิศวกรรมคอมพิวเตอร คณะวิศวกรรมศาสตร จุฬาลงกรณมหาวิทยาลัย
บทที่ 10* การออกแบบและการปรับจูนฐานขอมูลใชงานจริง Practical Database Design and Tuning วัตถุประสงค 1. 2. 3. 4. 5.
10.1
เพื่อใหมีความเขาใจในการออกแบบฐานขอมูลเพื่อการใชงานจริง สามารถระบุแฟคเตอรที่เกี่ยวของและสงผลตอการออกแบบฐานขอมูลเชิงกายภาพได สามารถตัดสินใจออกแบบ Index ได เพื่อใหมีความเขาใจและสามารถทําการดีนอรมัลไรซเซชั่นของฐานขอมูลได เพื่อใหมีความเขาใจในการปรับจูน Query
การออกแบบฐานขอมูลเพื่อการใชงานจริง ในบทนี้จะเปนการยายจากแนวคิดในการออกแบบจากเพียงทฤษฏีใหสามารถนําไปสูการออกแบบเพื่อใชงานจริงได โดยในปจจุบันมีการนําฐานขอมูลไปใชอยางแพรหลาย มีผูใชงานเกี่ยวของกับฐานขอมูลหนึ่งๆ เปนจําหนวนมากและ อาจจะปรับเปลี่ยนความตองการจากเพียงฐานขอมูลขนาดเล็กเปนฐานขอมูลขนาดใหญ และมีความซับซอนมากขึ้น ดังนั้นในการออกแบบนั้นจะตองคํานึงถึงการนําไปใชงานจริงดวยเชนกัน ในบทนี้จึงจะมีการกลาวถึง การออกแบบ ฐานขอมูลทางกายภาพในฐานขอมูลเชิงกายภาพหรือ Physical Database Design รวมไปถึงลักษณะทั่วไปของ การปรับจูนฐานขอมูลในระบบเชิงสัมพันธ (Tuning) เพื่อใหสามารถนําไปใชงานจริงไดอยางมีประสิทธิภาพมาก ยิ่งขึ้น
10.2
แฟคเตอรที่มีอิทธิพลตอการออกแบบฐานขอมูลเชิงกายภาพ แฟคเตอรที่มีอิทธิพลตอการออกแบบฐานขอมูลเชิงกายภาพ อาจประกอบดวยกันหลายสวน สามารถที่จะสรุปได ดังนี้ แฟคเตอร ที่ 1 การวิเคราะการสืบคนฐานขอมูล (Database Query) และ รายการ (Transaction) • ในการสืบคนขอมูล (Query) มีขอมูลดังตอไปนี้ที่มีความจําเปนที่จะตองคํานึงถึงในการทําการสืบคน หรือ เรียกใช Query ในแตละครั้ง - ไฟลที่เขาไปสอบถาม - แอทตริบิวตซึ่งกําหนดเงื่อนไขการเลือกเพื่อสอบถาม - แอทตริบิวตซึ่งกําหนดเงื่อนไขรวม หรือเงื่อนไขที่ลิงคไปยังหลายตารางหรือออปเจ็คเพื่อสอบถาม - แอทตริบิวตซึ่ง Query จะทําการเรียกคา หมายเหตุ: แอทตริบิวตในขอที่ 2 และ3 เปนตัวเลือกสําหรับเปนบทนิยามของการเขาถึงโครงสราง • ในการเขาไปอัพเดท (Update) รายการ (Transaction) หรือทําการ (Operation) ใด ๆ ที่มีความจําเปนที่ จะตองคํานึงถึงขอมูลดังตอไปนี้ - ไฟลที่จะอัพเดท - ชนิดของการทํางานของแตละไฟล (แทรก, อัพเดท หรือลบ) - แอทตริบิวตของเงื่อนไขการเลือกเพื่อการลบ หรืออัพเดทที่กําหนด - แอทตริบิวตซึ่งคาจะถูกเปลี่ยน ดวยการอัพเดท
* อางอิงจากบทที่ 16 ของเอกสารอางอิง [1]
2110422 การออกแบบระบบการจัดการฐานขอมูล ภาควิชาวิศวกรรมคอมพิวเตอร คณะวิศวกรรมศาสตร จุฬาลงกรณมหาวิทยาลัย
10-2
หมายเหตุ: แอทตริบิวตในขอที่ 3 เปนตัวเลือกสําหรับเปนบทนิยามของการเขาถึงโครงสราง สวนแอทตริ บิวตในขอที่ 4 เปนตัวเลือกสําหรับหลีกเลี่ยงการเขาถึงโครงสราง แฟคเตอร ที่ 2 การวิเคราะห ความถี่คาดหมาย (Expected Frequency) ของการเรียกใช (Invocation) การสืบคน (Query) และ รายการ หรือทรานแซคชัน (Transaction) • ขอมูลความถี่คาดหมาย ตามดวยขอมูลแอทตริบิวตที่รวบรวม ในแตละ Query และ Transaction ที่ใชเพื่อ คํานวณรายการสะสมของความถี่คาดหมาย ที่ใชในการ Query Transaction ทั้งหมด • แสดงเปนความถี่คาดหมายในการใชแอทตริบิวตแตละตัวในแตละไฟลเปนการเลือกแอทตริบิวต หรือแอทตริ บิวตรวม ในการ Query และ Transaction • กฎ 80-20 ประมาณ 80% ของการดําเนินการเปนการทํารายการใหเพียงแค 20% ของ Query และ Transaction
แฟคเตอร ที่ 3 การวิเคราะหเวลาบังคับของ Query และ Transaction ขอจํากัดดาน Performance หรือ ประสิทธิภาพ สงผลตอการจัดลําดับความสําคัญ หรือ Priority ของแอท ตริบิวต ซึ่งเปนตัวเลือกสําหรับการเขาถึงเสนทาง • การเลือกแอทตริบิวตที่ใชโดย Query และ Transaction และขอจํากัดดานเวลา หรือ Time Constraints กลายเปนตัวเลือกที่มีลําดับความสําคัญสูงขึ้นในการเปนตัวเลือกในการเขาถึงโครงสรางขั้นตน •
แฟคเตอร ที่ 4 การวิเคราะหความถี่คาดหมายของการอัพเดท (update operation) • ควรกําหนดจํานวนครั้งนอยสุดในการเขาถึงเสนทางสําหรับไฟลที่อัพเดทบอย แฟคเตอร ที่ 5 การวิเคราะหขอจํากัดที่มีความเปนเอกลักษณ (Uniqueness constraints) ของแอทตริบิวต • เสนทางที่จะใชในการเขาถึง (Access path) จะตองถูกกําหนดไวสําหรับแอทตริบิวตทุกตัวที่เปนตัวเลือกที่ สําคัญ หรือ เซตของแอทตริบิวต ที่เปนพื้นฐานสําคัญ หรือที่เปน primary key หรือ ขอจํากัดที่จะทําใหเปน เอกลักษณ (Unique)
10.3
การตัดสินใจในการออกแบบฐานขอมูลเชิงกายภาพ 10.3.1 การตัดสินใจในการออกแบบเกี่ยวกับอินเด็กซ (Index) ในการตัดสินใจเกี่ยวกับการจัดทํา indexing จะมีขอควรพิจารณาดังตอไปนี้ • แอทตริบิวตใดจะทําหนาที่เปนดัชนี หรือ Index - Index สามารถที่จะสรางจากแอททริบิวตมากกวาหนึ่งตัวได • จําเปนหรือไมที่จะตองสราง Clusters index - ในหนึ่ง table จะมีไดอยางมากเพียง index หนึ่งตัวที่จะสามารถทําหนาที่เปน primary index หรือ เปน Clustering Index - ถาแอทตริบิวตทําหนาที่เปน key ตองทําการสราง primary index ดวย - ถาแอทตริบิวตไมใช key จะตองทําการสราง Clustering Index ดวยเชนกัน • จําเปนหรือไมที่จะตองใช Hash index แทน Tree index • จําเปนหรือไมที่จะใช Dynamic hashing สําหรับไฟล - จะใชสําหรับไฟลที่มีความเปลี่ยนแปลงบอย (Volatile) หรือ มีการเปลี่ยนแปลงหรือลดขนาดลงอยาง ตอเนื่อง
10.4
ดีนอรมาไลเซชัน (Denormalization) การดีนอมอลไรซ ถือเปนการตัดสินใจการออกแบบเพื่อเพิ่มความเร็วในการสืบคน (Query) โตยที่การทํานอรมาไล เซชันนั้นมีวัตถุประสงคหลักคือการจัดแยกแอทตริบิวตที่เกี่ยวของกันในเชิงตรรกะ (logically related) ใหอยูในรูป ของตาราง เพื่อลดการซ้ําซอน (Redundancy) และหลีกเลี่ยงการอัพเดทอะนอรมาลี ซึ่งเปนสาเหตุใหเกิดการ ทํางานที่เปน overhead เพื่อรักษาความถูกตองของฐานขอมูล สวนวัตถุประสงคของการทําดีนอรมาไลเซชันนั้น คือ
2110422 การออกแบบระบบการจัดการฐานขอมูล ภาควิชาวิศวกรรมคอมพิวเตอร คณะวิศวกรรมศาสตร จุฬาลงกรณมหาวิทยาลัย
10-3
การปรับปรุงประสิทธิภาพของ query และ transaction ที่เกิดขึ้นเปนประจํา (โดยทั่วไป นักออกแบบจะรวมเขาไป ในตารางแอทตริบิวต ที่จําเปนตองใชในการตอบ Query หรือการสรางรายงาน ดังนั้นจึงควรหลีกเลี่ยงการรวมเขา กับตารางอื่น) หรืออาจมองไดวาการดีนอรมาไลเซชันเปนการ Trade off ระหวางประสิทธิภาพของการอัพเดท และ การทํา Query ตัวอยาง TEACH(STUDENT, COURSE, INSTRUCTOR) {{STUDENT, COURSE} --> INSTRUCTOR, INSTRUCTOR --> COURSE} • •
10.5
ดีตอมโพส แบบ Lossless TEACH ใหเปน T1(STUDENT, INSTRUCTOR) และ T2(INSTRUCTOR, COURSE) ซึ่งอยูในรูปของ BCNF เราตองเก็บ T1, T2, และ TEACH (3NF) เพื่อที่จะสามารถหาคําตอบวามี COURSE ใดที่ STUDENT ลงเรียนจาก INSTRUCTOR ใด โดยไมตอง join T1กับ T2 กอน
การปรับจูนฐานขอมูลของฐานขอมูลเชิงสัมพันธ 10.5.1
การปรับจูน (Tuning)
การปรับจูน คือกระบวนการในการแกไข/ปรับแตงการออกแบบฐานขอมูลทางกายภาพอยางตอเนื่อง โดยเฝา ติดตามการใชทรัพยากร (Resource Utilization) เชนเดียวกับกระบวนการภายใน DMBS เพื่อคนหาคอขวด (Bottleneck)เชน การแยงขอมูล หรืออุปกรณเดียวกัน โดยมีเปาหมายเพื่อใหแอพลิเคชั่นทํางานเร็วขึ้น เพื่อลด เวลาตอบสนองใน Query และ Transaction และเพื่อปรับปรุงปริมาณงาน Throughput โดยรวมของ Transaction
โดยใน DBMS นั้น จะมีการจัดเก็บสถิติ เชน • ขนาดของตาราง • จํานวนของ Distinct Value ในแตละคอลัมน • จํานวนครั้งที่แตละ Query หรือ Transaction ถูกเรียกใชภายในระยะเวลาแตละ Interval • จํานวนครั้งสําหรับเฟสที่แตกตางกันของ Query หรือ Transaction Processing นอกเหนือจากนั้น ยังมีสถิติที่ไดจากการติดตาม หรือ Monitoring • สถิติของการจัดเก็บ (Storage statistics) • สถิติของประสิทธิภาพอินพุตเอาทพุตและ อุปกรณ (I/O and device performance Statistics) • สถิติในการดําเนินการ Query และ Transaction (Query/transaction processing statistics) • สถิติเกี่ยวกับการ Locking และ บันทึกรายการ (Logging) ที่เกี่ยวของ (Locking/logging related •
statistics) สถิติดัชนี (Index statistics)
10.5.2 ปญหาที่ควรพิจารณาในการปรับจูน ปญหาที่พบบอยไดแก จะหลีกเลี่ยงปญหาของ Excessive lock contention อยางไร จะลด Overhead ของการบันทึกรายการ (Logging) และ การกําจัด (Dumping) ขอมูลที่ไมจําเปนอยางไร จะจัดขนาดของบัฟเฟอร (Buffer) และตารางเวลาของการประมวลผลใหเหมาะสมที่สุดอยางไร จะจัดสรรทรัพยากร เชน ดิสก แรม และโปรเซสเซอร เพื่อใหมีประสิทธิผลอยางไร
• • • •
10.5.3 การปรับจูนดัชนี ในการพิจารณาปรับจูนดัชนี หรือ Tuning indexes นั้น ควรคํานึงถึงสิ่งตางๆ ดังนี้
2110422 การออกแบบระบบการจัดการฐานขอมูล ภาควิชาวิศวกรรมคอมพิวเตอร คณะวิศวกรรมศาสตร จุฬาลงกรณมหาวิทยาลัย •
•
10-4
เหตุผลในทํา Tuning indexes - Query อาจจะใชเวลาในการรันนานหากไมมี index - Query อาจจะทําใหเกิด overhead เปนจํานวนมาก เนื่องจาก index อาจจะชี้ไปยังแอททริบิวตที่มี การเปลี่ยนแปลงของความถี่แบบ undergoes frequent ทางเลือกในการปรับจูนดัชนี - ทิ้ง หรือ/และสรางใหม - เปลี่ยนดัชนีที่ไมเปนกลุมไปเปนดัชนีกลุม(และอื่นๆ) - ปรับสรางใหม (Rebuild)
10.5.4 การปรับจูนการออกแบบฐานขอมูล ในการปรับจูนการออกแบบฐานขอมูล จําเปนตองระบุขอกําหนดกระบวนการเปลี่ยนอยางตอเนื่อง เปลี่ยนแปลงใน แผนผังแนวคิดหากจําเปน และสะทอนการเปลี่ยนแปลงเหลานั้นเขาไปใน conceptual schema และการออกแบบ ทางกายภาพ (Physical design) การเปลี่ยนแปลงที่เปนไปไดตอการออกแบบฐานขอมูลไดแก • ตารางปจจุบันอาจรวมเขาดวยกันโดยการทําดีนอรมาไลเซชั่น หากมีแอทตริบิวตจากสองตารางหรือมากกวาที่ ตองใชพรอมกันบอย และสําหรับตาราง (TABLE) ที่ไดมานั้น อาจจะมีทางเลือกในการออกแบบแบบอื่นๆ ที่ ทุกตารางนั้นอยูในรูปของ 3NF หรือ BCNF จึงสามารถปรับเปลี่ยนอันใดอันหนึ่ง หรือสลับ TABLE ได • ความสัมพันธในรูป R(K, A, B, C, D, …) โดยที่ K เปนชุดของแอทตริบิวตสําคัญ ที่อยูในรูปของ BCNF สามารถแบงเก็บอยูในหลายตารางที่อยูในรูปของ BCNF ดวย โดยสําเนา K ที่สําคัญซ้ําลงในแตละตาราง ตัวอยางเชน แยก R ออกเปน ตาราง R1(K, A, B) R2(K, C, D), R3(K, …). เรียกวา การพารธิชัน แนวตั้ง (Vertical Partitioning) • แอทตริบิวตจากตารางหนึ่งอาจถูกจัดเก็บในตารางอื่นได ถึงจะทําใหเกิดปญหาการซ้ําซอน (Redundancy) หรือเกิดความผิดปกติ (Anomalies) • เลือกใข Horizontal Partitioning เมื่อจําเปน
10.5.5 การปรับจูน Query สิ่งแสดงถึงวาตองการปรับจูน Query สามารถแสดงไดดังตอไปนี้ Query สงผลใหมีการเรียกใช หรือ เขาถึง (access) ดิสกมากเกินไป แผนการ Query แสดงถึง Index ที่เกี่ยวของที่ไมไดถูกใช
• •
กรณีทั่วไปที่ตองการการปรับจูน Query นั้น มีดังตอไปนี้ • Query optimizers หลายๆ ตัวไมไดใช index หากมีสมการทางคณิตศาสตร การเปรียบเทียบเชิงตัวเลข (numerical comparisons) ของแอททริบิวตที่ตางขนาดกัน หรือการเปรียบเทียบคานัล (NULL comparisons) และการเปรียบเทียบซับสตริง (Sub-string comparisons) อยูดวย • Index ที่มักจะไมคอยถูกใชสําหรับ nested queries ที่ใชคําสั่ง IN; ตัวอยางเชน
• •
•
SELECT SSN FROM EMPLOYEE WHERE DO IN (SELECT DNUMBER FROM DEPARTMENT WHERE MGRSSN = ‘333445555’); ในการใชคําสั้ง DISTINCT นั้น อาจเกิดปญหาความซ้ําซอน (Redundancy) ซึ่งเปนสิ่งที่เราควรเลี่ยง โดย
ที่ผลลัพธจะไมเปลี่ยนแปลง ควรหลีกเลี่ยงการใชงานตารางผลชั่วคราว (temporary result table) ที่ไมจําเปน โดยการยุบรวม Query เชาดวยกันถึง ยกเวนแตวาความสัมพันธแบบชั่วคราว (temporary relation) นั้นๆ จําเปนสําหรับการ ประมวลผลในลําดับถัดไป (Intermediate processing) หากเปนไปไดวามีหลายทางเลือกในการ join ใหเลือกใช clustering index และหลีกเลี่ยงการเปรียบเทียบ string
•
อยางไรก็ตาม ในบางกรณี การใช correlated queries และ temporaries ก็อาจดีก็ได ตัวอยางเชน SELECT SSN
2110422 การออกแบบระบบการจัดการฐานขอมูล ภาควิชาวิศวกรรมคอมพิวเตอร คณะวิศวกรรมศาสตร จุฬาลงกรณมหาวิทยาลัย
10-5
FROM EMPLOYEE E WHERE SALARY = SELECT MAX (SALARY) FROM EMPLOYEE AS M WHERE M.DNO = E.DNO
แยกออกเปน 2 Query ============================================ SELECT MAX (SALARY) AS HIGHSALARY, DNO INTO TEMP FROM EMPLOYEE GROUP BY DNO ============================================ SELECT SSN FROM EMPLOYEE, TEMP WHERE SALARY = HIGHSALARY AND EMPLOYEE.DNO = TEMP.DNO • • •
ลําดับของตารางจากคําสั่ง FROM อาจจะกระทบตอกระบวนการ Join Query optimizer บางตัว เมื่อทํางานในลักษณะ Nested Quesires นั้น อาจมีประสิทธิภานดอยกวาการ ทํา Un-nested queries มีแอพลิเคชันจํานวนมากที่ใชการสรางมุมมอง (VIEW) เพื่อกําหนดขอบเขคของขอมูลที่สนใจสําหรับแอพลิเค ชันนั้นๆ แด บางครั้งมุมมองเหลานี้กลายเปนผลไมดี หรือ overkill ตัวเอง
10.5.6 แนวทางการปรับจูน Query เพิ่มเติม •
การ Query ดวยเงื่อนไขการเลือกหลายทางเลือก (Multiple selection) ที่เชื่อมดวย OR อาจจะไมเรียก Query Optimizer ขึ้นมาเพื่อใช Index ดังนั้น Query แบบนั้น ควรถูกแบงออกมา และ แสดงในรูปแบบ Union Query โดยแตละตัวจะมีเงื่อนไขในแอทตริบิวตที่จะทํานําไปสู Index ที่จะใชงาน ตัวอยางเขน SELECT FNAME, LNAME, SALARY, AGE FROM EMPLOYEE WHERE AGE > 45 OR SALARY < 50000 SELECT FNAME, LNAME, SALARY, AGE FROM EMPLOYEE WHERE AGE > 45 UNION SELECT FNAME, LNAME, SALARY, AGE FROM EMPLOYEE WHERE SALARY < 50000
• • • •
เงื่อนไข NOT อาจจะเปลี่ยนใหอยูในรูปของเชิงบวก Embedded SELECT block อาจจะแทนดวย join หากมีการใข Equality Join ระหวางสองตาราง จะไดวา ขอบเขตหรือ range ที่กําหนดใหกับแอทตริบิวตที่ใช oin ในตารางหนึ่ง อาจซ้ํากับอีกตารางหนึ่งก็ได การใขเงื่อนไข WHERE ที่ดี ควรจะใชเพื่อเรียกใข Index จากหลายคอลัมน ดังตัวอยาง SELECT REGION#, PROD_TYPE, MONTH, SALES FROM SALES_STATISTICS WHERE REGION# = 3 AND ((PRODUCT_TYPE BETWEEN 1 AND 3) OR (PRODUCT_TYPE BETWEEN 8 AND 10) SELECT REGION#, PROD_TYPE, MONTH, SALES FROM SALES_STATISTICS WHERE (REGION# = 3 AND ((PRODUCT_TYPE BETWEEN 1 AND 3)) OR (REGION# = 3 AND (PRODUCT_TYPE BETWEEN 8 AND 10)
2110422 การออกแบบระบบการจัดการฐานขอมูล ภาควิชาวิศวกรรมคอมพิวเตอร คณะวิศวกรรมศาสตร จุฬาลงกรณมหาวิทยาลัย
10-6
แบบฝกหัด 1. 2. 3. 4.
จากแฟคเตอรที่สงผลในการออกแบบฐานขอมูล จงทําการวิเคราะหแฟคเตอรในแตละตัวที่ไดระบุไวในบทนี้ อธิบายความสําคัญของ Clustering Index ในการปรับจูน ในการตัดสินใจออกแบบเกี่ยวกับ index มีขอควรระวังเกี่ยวกับแอททริบิวตอยางไรบาง อธิบายสถิติที่เกี่ยวของในการปรับจูนฐานขอมูล