Nhờ sự giảng d ạy rõ ràng, sinh độ ng và nh ng chia s kinh nghi m th ữ ẻ ệ ực tiễn từ Thầy,chúng em đã hiểu sâu hơn về các phương pháp tối ưu hóa hiệu năng cơ sở dữ liệu, bao gồm việc th
Trang 1Giảng viên giảng dạy: PHAN HIỀN
Thành viên thực hiện: TRẦN CHÍ CÔNG
LÊ CAO PHÚC
NGUYỄN LÊ SANG TRẦN QUÝ THỊNH NGUYỄN ĐÌNH TRƯỜNG
ĐẠI HỌC KINH TẾ TP HỒ CHÍ MINH
TRƯỜNG CÔNG NGHỆ VÀ THIẾT KẾ
KHOA CÔNG NGHỆ THÔNG TIN KINH DOANH
ĐỒ ÁN CUỐI KÌ
MÔN HỌC: QUẢN TRỊ CƠ SỞ DỮ LIỆU
ĐỀ TÀI: TỐI ƯU HÓA HIỆU NĂNG DATABASE
Trang 2L I M Ờ Ở ĐẦ U
Trướ c h t, nhóm chúng em xin gửi l i c ế ờ ảm ơn sâu sắc đế n gi ảng viên
hư ớng d n Phan Hi ẫ ền, người đã không chỉ ận tình hướ t ng d ẫ n chúng em trong su t quá trình th c hi n d án mà còn truy ố ự ệ ự ền đạ t nh ng ki n th ữ ế ức quý báu cùng kinh nghiệm th c t vô cùng h u ích Nh vào s dìu d t và ự ế ữ ờ ự ắ
sự t n tâm c a th ậ ủ ầy, chúng em đã có cơ hội h c h i, áp d ng lý thuy t vào ọ ỏ ụ ế thực hành m t cách hi u qu ộ ệ ả, qua đó hiểu sâu hơn về lĩnh vực quản tr ịcơ
sở d ữ liệu
Nhờ sự giảng d ạy rõ ràng, sinh độ ng và nh ng chia s kinh nghi m th ữ ẻ ệ ực tiễn từ Thầy,chúng em đã hiểu sâu hơn về các phương pháp tối ưu hóa hiệu năng cơ sở dữ liệu, bao gồm việc thiết kế bảng hợp lý, lập chỉ mục hiệu quả, tối ưu truy vấn SQL và qu n lý tài nguyên h ả ệ thống Đây không chỉ là nh ng ki n th c h c thu t mà còn là hành trang quý giá giúp em t ữ ế ứ ọ ậ ự tin hơn trong việc áp dụng vào thực tế công việc sau này
Trân tr ng kính chào và c ọ ảm ơn.
Trang 3MỤC L C Ụ
LỜI M Ở ĐẦ 1 U
CHƯƠNG 1 PHẦN MỞ ĐẦU 3
1.1 B i c nh hi n t i ố ả ệ ạ 3
1.2 Nh ng thách th c và t m quan tr ng c a vi c t ữ ứ ầ ọ ủ ệ ối ưu 3
1.3 Ph m vi nghiên c u ạ ứ 5
CHƯƠNG 2 TỔNG QUAN LÝ THUYẾT 6
2.1 T ng quan v InnoDB ổ ề 6
2.2 Các thành ph n quan tr ầ ọng 7
2.3 Khái ni ệm 8
CHƯƠNG 3 PHƯƠNG PHÁP TỐI ƯU 10
3.1 Tối Ưu InnoDB Buffer Pool 10
3.2 T ối ưu hóa TableSpace 13
3.3 T ối ưu hóa Index 14
3.4 Cách thức hoạt động chung 17
CHƯƠNG 4 THẢ O LU ẬN & ĐÁNH GIÁ 19
4.1 Các k t qu ế ả nhận đượ 19 c 4.2 M t s t n t i ộ ố ồ ạ 19
4.3 Hướng phát triển 19
TÀI LI U THAM KH O Ệ Ả 21
Trang 4CHƯƠNG 1 PHẦN MỞ ĐẦU
1.1 B i c nh hi n t i ố ả ệ ạ
Trong k nguyên sỷ ố hiện nay, dữ liệu đã trở thành tài s n quan tr ng nh t c a mả ọ ấ ủ ọi
tổ chức và doanh nghi p V i s phát tri ệ ớ ự ển vũ bão của công ngh thông tin, khệ ối lượng d ữ liệu được t o ra và x lý m ạ ử ỗi ngày đang tăng theo cấp số nhân Trong bối cảnh đó, hiệu năng của hệ thống quản lý cơ sở d ữ liệu (CSDL) không còn ch là m ỉ ột yếu t k ố ỹ thuật đơn thuần, mà đã trở thành độ ng lực then chốt quy ết đị nh sự thành
công c a các gi i pháp công ngh thông tin ủ ả ệ
Xuất phát từ thực ti ễn đó, đề tài "Tối Ưu Hiệu Năng Cơ Sở ữ Liệu InnoDB" được D
thực hi n v i m ệ ớ ục tiêu nghiên c u chuyên sâu nh m gi i quy t nh ng thách th c k ứ ằ ả ế ữ ứ ỹ
thu t trong vi c qu n trậ ệ ả ị và vận hành cơ sở dữ li ệu Chúng tôi hướng đế n việc phân
tích toàn di n các thành ph n then chệ ầ ốt như InnoDB Buffer Pool, Tablespace, và
Indexing - những y u t quyế ố ết định đến s c mứ ạnh th c s c a h ự ự ủ ệ thống CSDL Nghiên c u này không ch mang tính h c thuứ ỉ ọ ật cao mà còn mang đậm tính ứng dụng thực ti n B ng vi c áp d ễ ằ ệ ụng các phương pháp phân tích chuyên sâu, tiến hành các
thí nghi m benchmark chính xác, chúng tôi k v ng sệ ỳ ọ ẽ mang đến nh ng gi i pháp ữ ả
cụ thể, kh thi giúp các nhà phát tri n và qu n tr h ả ể ả ị ệ thống c i thi ả ện đáng kể hiệu suất hoạt động của cơ sở dữ liệu
1.2 Nh ng thách th c và t m quan tr ng c a vi c tữ ứ ầ ọ ủ ệ ối ưu
1.2.1 Những thách thức
Trong quá trình quản lý và vận hành cơ sở dữ liệu, các tổ chức thường gặp phải những thách thức lớn, đặc biệt khi khối lượng dữ liệu không ngừng gia tăng và các yêu cầu truy xuất ngày càng phức tạp Các thách thức phổ biến bao gồm:
▪ Tăng Khối Lượng Dữ Liệu: Sự bùng nổ của dữ liệu từ các hệ thống
IoT, thương mại điện tử và các ứng dụng hiện đại đòi hỏi cơ sở dữ liệu phải có khả năng xử lý hiệu quả trong thời gian ngắn mà không làm giảm hiệu năng
▪ Hiệu Quả Truy Vấn: Các truy vấn không được tối ưu có thể gây ra sự
chậm trễ trong quá trình xử lý, ảnh hưởng tiêu cực đến trải nghiệm người dùng và hoạt động kinh doanh
▪ Tài Nguyên Hệ Thống Có Hạn: CPU, bộ nhớ và lưu trữ thường bị
giới hạn, trong khi nhu cầu xử lý lại ngày càng lớn Điều này đòi hỏi phải phân bổ và sử dụng tài nguyên một cách hợp lý
Trang 5▪ Khả Năng Mở Rộng: Việc đảm bảo hệ thống có thể mở rộng khi quy
mô dữ liệu hoặc số lượng người dùng tăng cao là một thách thức lớn đối với các kiến trúc cơ sở dữ liệu truyền thống
▪ Tính Toàn Vẹn và Độ Tin Cậy: Các thao tác tối ưu hóa phải đảm bảo
không làm ảnh hưởng đến tính toàn vẹn của dữ liệu và độ tin cậy của
hệ thống
1.2.2 Tầm quan tr ng c a vi c t ọ ủ ệ ối ưu hóa hiệu năng
Tối ưu hóa cơ sở dữ liệu không chỉ là cải thi n tệ ốc độ mà còn mang l i nhi u lạ ề ợi ích quan trọng:
▪ Hiệu Suấ t H Thống C i Thi ệ ả ện Đáng Kể: Vi c gi m th i gian truy ệ ả ờvấn và tăng tốc độ xử lý giúp hệ thống hoạt động mượt mà hơn, đáp ứng nhanh các yêu c u t ầ ừ người dùng
▪ Giảm Chi Phí V n Hành ậ : Một cơ sở d ữ liệu được tối ưu tốt s s dẽ ử ụng
ít tài nguyên hơn, giảm nhu cầu nâng cấp phần cứng hoặc mở rộng cơ
sở h t ng không c n thiạ ầ ầ ết
▪ Tăng Hiệu Quả Quyết Định: Dữ liệu được truy xu t nhanh chóng và ấchính xác là n n tề ảng để đưa ra các quyết định kinh doanh k p th i và ị ờhiệu quả
▪ Tăng Tính Cạnh Tranh: Các tổ chức có hệ thống cơ sở ữ liệ d u hiệu quả hơn sẽ cung cấp dịch vụ tốt hơn, cải thiện trải nghiệm người dùng
và t o l i th cạ ợ ế ạnh tranh trên th ị trường
▪ Hỗ Trợ Khả Năng Mở R ng: H ộ ệ thống đượ ối ưu hóa sẽ ễc t d dàng thích nghi v i sớ ự tăng trưởng dữ liệu ho c sặ ố lượng người dùng mà không cần thay đổi lớn trong thi t k ế ế
Trang 61.3 Ph m vi nghiên c u ạ ứ
Bài báo cáo này t p trung nghiên c u các k thu t và chiậ ứ ỹ ậ ến lược tối ưu hóa hiệu năng
cơ sở dữ liệu MySQL v i tr ng tâm là ớ ọ InnoDB, m t storage engine phộ ổ biến và
m nh m Các n i dung chính trong ph m vi nghiên c u bao gạ ẽ ộ ạ ứ ồm:
▪ InnoDB InnoDB là storage engine mặc định trong MySQL, hỗ trợ các tính năng như giao dịch (transaction), khóa c p hàng (row-level locking), và bấ ảo toàn tính toàn v n tham chi u (referential integrity) ẹ ế
▪ InnoDB Buffer Pool Là vùng b ộ nhớ chính của InnoDB, nơi lưu trữ dữ liệu, chỉ mục (index) và metadata để tăng tốc độ truy cập
▪ Tablespace Là nơi lưu trữ dữ liệu và chỉ m c c a các b ng trong InnoDB ụ ủ ảTablespace ảnh hưởng tr c tiự ếp đến vi c quệ ản lý dung lượng và tốc độ truy xuất d ữ liệu
▪ Index (Ch Mỉ ục) Là công c quan trụ ọng giúp tăng tốc độ truy v n b ng cách ấ ằsắp x p và tế ổ chức d ữ liệu theo cách hi u qu ệ ả hơn
Trang 7CHƯƠNG 2 TỔNG QUAN LÝ THUY T Ế
• Khóa c p hàng (Row-level locking): InnoDB s dấ ử ụng cơ chế khóa cấp hàng
để cho phép nhi u truy về ấn đồng th i trên các hàng d u khác nhau mà ờ ữ liệkhông gây ra xung đột Điều này giúp tối ưu hóa hiệu su t trong các h ấ ệthống yêu c u nhi u giao dầ ề ịch đồng thời
• Khả năng phục hồi dữ u: InnoDB s d ng các k liệ ử ụ ỹ thuật như redo log và doublewrite buffer để đảm bảo tính toàn v n c a d u ngay c khi hẹ ủ ữ liệ ả ệ thống bị s c Khi có s c x y ra, InnoDB có th ự ố ự ố ả ể phục h i d ồ ữ liệu mà không b m t mát thông qua vi c ghi lị ấ ệ ại các thay đổi trước khi thực sự ghi vào đĩa
Trang 82.2 Các thành ph n quan trầ ọng
InnoDB được cấu thành từ nhiều thành phần cơ bản, m i thành phỗ ần đóng vai trò quan tr ng trong vi c tọ ệ ối ưu hóa hiệu su t và tính toàn v n cấ ẹ ủa cơ sở ữ liệu d Tablespaces: là nơi lưu trữ d ữ liệu và ch m c trong InnoDB Có hai lo i tablespace ỉ ụ ạchính:
• System Tablespace: Lưu trữ các metadata hệ thống, thông tin về bảng, và dữ liệu của các b ng không s dả ử ụng tính năng file-per-table T t c các bấ ả ảng được lưu trữ chung trong m t tablespace duy nh ộ ất
• File-per-table Tablespace: M i b ng có m t file tablespace riêng bi t (vỗ ả ộ ệ ới đuôi ibd), điều này giúp dễ dàng quản lý dữ liệu và ph c h i khi c n Viụ ồ ầ ệc bật tính năng innodb_file_per_table có thể cải thiện hiệu suất và quản lý dễ dàng hơn trong các cơ sở dữ liệu lớn
Index: đóng vai trò quan trọng trong vi c tệ ối ưu hóa tốc độ truy v n InnoDB h ấ ỗ trợ hai lo i ch mạ ỉ ục chính:
• Clustered Index: Đây là chỉ mục chính của bảng, trong đó các node lá chứa toàn b d u c a b ng B ng s ộ ữ liệ ủ ả ả ẽ được lưu trữ theo thứ tự của chỉ m c này ụ
• Secondary Index: Ch m c ph không ch a d ỉ ụ ụ ứ ữ liệu mà ch ỉtrỏ đến các ch mỉ ục chính, giúp c i thi n tả ệ ốc độ truy v n không ph i theo th t chính ấ ả ứ ự
Việc t o ch m c trên các cạ ỉ ụ ột thường xuyên được s d ng trong các câu truy vử ụ ấn giúp giảm đáng kể thời gian thực thi
Buffer Pool: Buffer Pool là m t khu v c bộ ự ộ nhớ trong InnoDB, nơi lưu trữ các d ữliệu và chỉ mục được truy cập thường xuyên Khi truy v n yêu c u d u, InnoDB ấ ầ ữ liệ
Trang 9sẽ kiểm tra trong buffer pool trước khi truy cập đến đĩa, giúp giảm tải cho hệ thống
và c i thi n tả ệ ốc độ truy xuất dữ liệu
Redo Log và Undo Log:
• Redo Log: Được s dử ụng để ghi l i t t c ạ ấ ả các thay đổi đối v i d ớ ữ liệu mà chưa được ghi vào đĩa Khi h ệ thống g p s cặ ự ố, các thay đổi trong redo log s ẽ được
sử dụng để phục h i d ồ ữ liệu
• Undo Log: Lưu trữ các thông tin cần thiết để hoàn tác (rollback) các giao dịch chưa hoàn tất Điều này giúp đảm bảo rằng các giao d ch không hoàn ịchỉnh sẽ không làm thay đổi cơ sở dữ liệu
2.3 Khái ni m ệ
2.3.1 Inno buffer pool
Là m t vùng nh ộ ớ chính để InnoDB cache table và index khi nó được truy cập Buffer pool cho phép d ữ liệu được s dử ụng thường xuyên được lấy trực tiếp từ b ộnhớ, giúp tăng tốc độ xử lý Thông thường, ở các máy chủ chuyên dụng, 80% bộ nhớ s dùng cho buffer pool ẽ
Buffer pool là nơi để InnoDB cache table và index, đây là một thành phần quan tr ng c a kiọ ủ ến trúc InnoDB, nó giúp tăng tốc độ truy xu t dấ ữ liệu b ng cách ằgiảm số l n truy xu t d u t ầ ấ ữ liệ ừ ổ đĩa (disk I/O) b ng cách: ằ
• Nếu page đã có trong buffer pool MySQL sẽ đọc tr c ti p t b ự ế ừ ộ nhớ mà không cần phải đọ ừ ổ đĩa, điềc t u này sẽ giúp tăng tốc độ truy xu t d ấ ữ liệu
• Nếu page không có trong buffer pool, MySQL s ẽ phải đọc từ ổ đĩa và lưu vào buffer pool trước khi tr v k t qu Viả ề ế ả ệc đọc d ữ liệu t ừ ổ đĩa sẽ t n nhi u thố ề ời gian hơn so với đọc từ bộ nhớ nên nó sẽ làm ch m tậ ốc độ truy xu t d ấ ữ liệu.2.3.2 Table Space
Tablespace là một vùng lưu trữ trên đĩa mà cơ sở ữ liệ d u s dử ụng để lưu trữcác b ng và ch m c Tablespace có th bao g m m t ho c nhi u t p dả ỉ ụ ể ồ ộ ặ ề ệ ữ liệu vật lý trên đĩa Trong hệ thống InnoDB, tablespace giúp tổ chức và quản lý các c u trúc dấ ữ liệu quan trọng như dữ liệu b ng, ch m c, undo logs và các ả ỉ ụthành ph n khác ầ
Trang 102.3.3 Index
• Index là m t c u trúc d ộ ấ ữ liệu được dùng để định v và truy c p nhanh nh t vào ị ậ ấ
dữ liệu trong các b ng database ả
• Index là m t cách tộ ối ưu hiệu su t truy v n database b ng vi c giấ ấ ằ ệ ảm lượng truy c p vào b ậ ộ nhớ khi th c hi n truy vự ệ ấn
Ví d ụ
Giả s b ử ạn có m t b ng d ộ ả ữ liệu với 1000 người và b n mu ạ ốn tìm người có tên là
"Thanh" Cơ chế đánh index sẽ hoạt động như sau:
Khi b n t o index cho c t "name", tên c a mạ ạ ộ ủ ỗi ngườ ẽ được đánh số ừ 0 đến i s t
999 theo th t abc Ví d : "An" có th có s index 0, "Anh" có s index 1, và ứ ự ụ ể ố ố tiếp tục như vậy Tóm lại, danh sách tên s ẽ được s p x p theo th t abc ắ ế ứ ự Khi bạn đánh index và nhập truy vấn "SELECT WHERE name = 'Thanh'", cơ chế index sẽ được s d ử ụng để ối ưu hóa việ t c tìm ki m Thay vì so sánh t ng tên ế ừ một, nó s b ẽ ắt đầu từ giữa danh sách và hỏi: "Tên v ở ị trí gi a có l ữ ớn hơn hay nhỏ hơn 'Thanh'?" Nếu lớn hơn, nó sẽ tìm ở nửa phía sau của danh sách; nếu nhỏ hơn, nó sẽ tìm ở nửa phía trước Quá trình này l p l ặ ại cho đến khi tìm ra tên
"Thanh" hoặc đạ ớ ố ầt t i s l n so sánh tối đa, thường là 10 lần.
Khi số lượng người càng nhiều, cơ chế index giúp tìm kiếm nhanh hơn Ví dụ, nếu bạn có m t tri ộ ệu người, ch c n tỉ ầ ối đa 20 lần so sánh để tìm ra người tên
"Nam", trong khi n u không có index, b n có th ế ạ ể phả i so sánh t i 999.999 lần ớ
Trang 11CHƯƠNG 3 PHƯƠNG PHÁP TỐI ƯU
3.1 Tối Ưu InnoDB Buffer Pool
Buffer Pool là thành phần quan trọng quyết định hiệu suất của InnoDB Để tối ưu hóa hiệu suất, các nhà quản trị cơ sở dữ liệu cần phải cấu hình và điều chỉnh buffer pool sao cho phù hợp với tài nguyên phần cứng và yêu cầu của hệ thống
▪ Tăng Kích Thước Buffer Pool:
Kích thước của buffer pool cần được cấu hình sao cho phù hợp với dung lượng bộ nhớ RAM của hệ thống Một quy tắc phổ biến là dành khoảng 70 80% bộ nhớ hệ -thống cho buffer pool, tùy thuộc vào yêu cầu của cơ sở dữ liệu
Ví dụ: Đối với một máy chủ có 64GB RAM, bạn có thể cấu hình như sau:
[mysqld]
innodb_buffer_pool_size=50G
▪ Phân Chia Buffer Pool:
Khi cơ sở dữ liệu có khối lượng công việc lớn và yêu cầu nhiều truy vấn đồng thời, việc chia buffer pool thành nhiều instance sẽ giúp tăng khả năng xử lý đồng thời, giảm thiểu tắc nghẽn
Ví dụ:
innodb_buffer_pool_instances=8
Trang 12Thu t toán least recently used (LRU) c a buffer pool ậ ủ
Buffer pool s d ng thuử ụ ật toán LRU để xác nh page nào cđị ần xóa để nhường ch ỗcho page mới Trước gi i thích thu t toán chúng ta hãy nhìn qua hình vả ậ ẽ dưới đây
để có cái nhìn tổng quan hơn:
Khi cần thêm ch ỗ để thêm 1 page m i vào buffer pool, page nào ít s d ng nh t s ớ ử ụ ấ ẽ
bị loại b và m t page m i s ỏ ộ ớ ẽ được thêm vào giữa danh sách "Midpoint insertion" chia Buffer Pool list thành 2 sublist dưới đây:
• Ở phần đầu là "new sublist" là những page được truy c p gậ ần đây
• Ở phần cu i là "old sublist" là nhố ững page cũ truy cập ít hơn
Trang 13Mặc định thu t toán hoậ ạt động như sau:
• 3/8 buffer pool dành cho “old sublist”
• “Mid point” của danh sách là ranh giới của đuôi “new sublist” và phần đầu của “old sublist”
• Khi InnoDB đọc một page và đưa nó vào buffer pool, trước tiên nó sẽ chèn vào “Mid point”
• Khi một page được truy c p b t lu n nó ậ ấ ậ ở “new sublist” hay “old sublist”, thì
nó s ẽ được chuy n qua phể ần đầu “new sublist”
• Page nào ít được sử dụng sẽ được đẩy về cuối danh sách và bị xóa khỏi danh sách n u c n khoế ầ ảng trống cho vi c thêm page m i Page b xóa kh i buffer ệ ớ ị ỏpool t ừ “old sublist”
Mặc định, page được l y khi khi chúng ta th c hi n các truy vấ ự ệ ấn đọ ẽ được s c thêm ngay vào “new sublist”, điều này có nghĩa nó ở buffer pool lâu hơn Ví dụ quét b ng ảcho mysqldump ho c s d ng các câu truy v n SELECT không có mặ ử ụ ấ ệnh đề WHERE
nó có thể đưa một lượng l n dớ ữ liệu vào buffer pool và lo i b mạ ỏ ột lượng l n d ớ ữliệu cũ mặc dù d ữ liệu mới này chưa chắc đã được s d ng l i ử ụ ạ Ở tình hu ng này số ẽ làm cho các page s dử ụng thường xuyên bị đưa vào “old sublist” và có thể bị đá ra ngoài Cho nên khi vi t truy vế ấn đọc chúng ta hãy c g ng tố ắ ối ưu nó đặc biệt đừng quên mệnh đề WHERE
Ngoài ra còn có công thức để giúp đánh giá hiệu qu s d ng InnoDB Buffer Pool ả ử ụtrong MySQL và nó giúp xác định tỷ lệ truy cập dữ liệu từ bộ nhớ RAM (cache) thay vì phải đọc từ ổ đĩa:
Công thức:
Với :
- Innodb_pages_read là s ố lượng trang d ữ liệu được đọc từ ổ đĩa vào InnoDB
Buffer Pool