Thứ Hai, 30 tháng 1, 2023

Phát hiện toàn bộ những Foreign Key chưa được đánh Index trong Oracle Database

Scripts sau sẽ giúp các bạn nhanh chóng rà soát toàn bộ các Tables có FK và chỉ ra chi tiết thông tin các tables chứa FK chưa được đánh Index

Thứ Tư, 18 tháng 1, 2023

Thứ Sáu, 13 tháng 1, 2023

Hướng dẫn cài đặt Galera 3 node MariaDB/MySQL trên CentOS 7

Tổng quan#

MariaDB là một sản phẩm mã đóng tách ra từ mã mở do cộng đồng phát triển của hệ quản trị cơ sở dữ liệu quan hệ MySQL nhằm theo hướng không phải trả phí với GNU GPL. MariaDB được phát triển từ sự dẫn dắt của những nhà phát triển ban đầu của MySQL, do lo ngại khi MySQL bị Oracle Corporation mua lại. Những người đóng góp được yêu cầu chia sẽ quyền tác giả của họ với MariaDB Foundation.

Tổng quan về Server Clustering

1. MÔ HÌNH CHUNG CỦA HỆ THỐNG SERVER CLUSTER

Server Cluster là một mô hình được đưa ra nhằm đáp ứng được các nhu cầu ngày càng gia tăng trong việc truy xuất các ứng dụng có tính chất quan trọng như thương mại điện tử, database … Các ứng dụng này phải có khả năng chịu được lỗi cao, luôn đáp ứng được tính sẵn sàng và khả năng có thể mở rộng hệ thống khi cần thiết. Các khả năng của Server Cluster giúp cho hệ thống có thể tiếp tục được hoạt động và cung cấp dịch vụ luôn luôn được sẵn sàng ngay cả khi hệ thống có thể xảy ra lỗi như hỏng ổ đĩa hay server bị down Mô hình Server Cluster bao gồm nhiều server riêng lẻ được liên kết và hoạt động cùng với nhau trong một hệ thống. Các server này giao tiếp với nhau để trao đổi thông tin lẫn nhau và giao tiếp với bên ngoài để thực hiện các yêu cầu. Khi có lỗi xảy ra, các service trong Cluster hoạt động tương tác với nhau để duy trì tính ổn định và tính sẵn sàng cao cho Cluster.

Triển khai Cluster MySQL đảm bảo tính sẵn sàng cho dịch vụ Web

Gần đây nhất, trong chiều ngày 14/12/2020 (theo giờ Việt Nam), các dịch vụ của Google đã ngừng hoạt động trên toàn thế giới, với các lỗi được ghi nhận, bao gồm Gmail, Google Calendar, YouTube và một phần của Google Search. Sự cố với Google đã ảnh hưởng đến lượng lớn người dùng Internet trên toàn cầu. Đây là cũng là sự cố lớn nhất của Google trong năm 2020. Dễ dàng nhận thấy các tên tuổi lớn như Google hay các tên tuổi lớn khác đều không tránh khỏi việc xảy ra sự cố với hệ thống, dù xác suất là vô cùng thấp và hi hữu, tuy nhiên thiệt hại mang đến thì không hề nhỏ.

Tăng tốc database Index phần 13 Merge

Đã lâu không quay lại chủ đề này, vì trước mấy ku em bảo mình viết hàn lâm khó hiểu quá nên mình chuyển qua dạng vấn đáp xem có dễ hiểu hơn chút nào không? Các bạn có góp ý vui lòng comment nhé!

Tăng tốc database Index phần 12 với LIKE

Nếu các bạn chưa đọc bài trước có thể đọc tại link Tăng tốc database phần 11 Tìm kiếm theo Khoảng, Lớn Hơn, Nhỏ Hơn, và BETWEEN

Truy vấn với Like nhiều lúc rất hiệu quả, nhiều lúc lại rất chậm. Có thể một số từ khóa được đánh index tốt, một số thì không. Nhiều lúc vị trí của wild card có thể cho kết quả rất khác nhau. VÍ dụ dùng % wild card ở giữa từ khóa

Tăng tốc database index phần 11 Tìm kiếm theo Khoảng, Lớn Hơn, Nhỏ Hơn, và BETWEEN

Nếu các bạn chưa đọc bài trước có thể đọc tại đây (10 - Query với tham số)

Các phép toán lớn hơn (>) nhỏ hơn (<) và BETWEEN cũng có thể sử dụng index giống toán tử bằng (=), thậm chí kể cả toán tử LIKE cũng có thể dùng được trong một số trường hợp. Việc dùng index kiểu này có giới hạn nếu đánh index trong một index chứa nhiều cột và chọn cột nào trước, cột nào sau. Nhiều khi không thể chọn được thứ tự đúng.

Tăng tốc database index phần 10 - Query với tham số

Nếu các bạn chưa đọc bài trước có thể đọc tại link Tăng tốc database index phần 9 - Function- User-Defined Function

Có hai cách để truyền dữ liệu vào database, một là truyền trực tiếp qua câu lệnh, hai là truyền qua tham số, thường là sử dụng ?, :name or @name và truyền giá trị tương ứng qua lời gọi.

Tăng tốc database index phần 9 - Function - User-Defined Function

Nếu các bạn chưa đọc bài trước có thể đọc tại link Tăng tốc database index phần 8 - Function- Tìm kiếm không phân biệt chữ Hoa chữ Thường- UPPER và LOWER

Dùng Function-based có vẻ ngon rồi nhưng có phải mọi hàm đều sử dụng được nó không? Có thể dùng hàm mặc định như UPPER cũng có thể dùng biểu thức kiểu A+B có thể dùng cả hàm tự định nghĩa nữa. Tuy nhiên có một ngoại lệ quan trọng có là hàm có phụ thuộc vào thời gian hiện tại ( dù là gián tiếp hay trực tiếp) ví dụ

Tăng tốc database index phần 8 - Function - Tìm kiếm không phân biệt chữ Hoa chữ Thường - UPPER và LOWER

Nếu các bạn chưa đọc bài trước có thể đọc tại link này Tăng tốc database index phần 7 -Index chậm 2

Phần này trong thực tế mình không gặp, do mình luôn để collation trong DB là Case-Insensitive, tuy nhiên vì mình dịch từ bài gốc của tác giả nên mình sẽ dịch luôn và không cắt gọt. Biết đâu có lúc nào đó lại thiết kế db Case-Sensitive thì sao. Lúc đó có thể dùng được chỗ này. Trong trường hợp database thiết kế có phân biệt hoa thường, mà cần truy vấn không phân biệt hoa thường, cách thông thường sẽ truy vấn như thế này.

Tăng tốc database index phần 7 - Index chậm 2

Nếu các bạn chưa đọc bài trước có thể đọc tại link này Tăng tốc database index phần 6 -Index kết hợp

Trong phần trước mình đã trình bày về lợi ích đạt được khi đổi vị trí index, tuy nhiên ví dụ chỉ xem xét với 2 câu lệnh SQL. Tuy nhiên việc thay đổi index có thể ảnh hưởng tới tất cả các câu truy vấn trên bảng. Phần này sẽ trình bày về cách database chọn một index và các ảnh hưởng có thể xảy ra khi thay đổi index đã có.

Tăng tốc database index phần 6 - Index kết hợp

Nếu các bạn chưa đọc bài trước có thể đọc tại link này Tăng tốc database index phần 5 -WHERE trên khóa chính

Mặc dù khóa chính được tạo index tự động, và ta biết nếu where theo khóa chính thì chạy rất nhanh rồi, nhưng nếu khóa chính lại bao gồm nhiều trường thì sao trường hợp này được gọi là concatenated index ( multi-column, composite hoặc combined index) thôi mình gọi là Index Kết Hợp cho nó dễ nhé. Nhưng khi tạo theo nhiều trường này có cần quan tâm thứ tự không, hay cần hai trường thì cứ add hai trường, ba trường thì cứ đánh index cho 3 trường không cần thứ tự gì cả? Đáp án là bạn cần rất cẩn thận khi đánh index có nhiều trường, vì thứ tự của nó rất quan trọng. Chi tiết mình sẽ giải thích bên dưới

Tăng tốc database index phần 5 - WHERE trên khóa chính

Nếu các bạn chưa đọc bài trước có thể đọc tại link này Tăng tốc database index phần 4 - Index chậm

Trong những phần trước mình đã mô tả về cách index hoạt động và nguyên nhân làm index chậm, trong các phần sau mình sẽ mô tả cách phát hiện mà tránh những vấn đề này, bắt đầu với WHERE. Lệnh WHERE xác định điều kiện tìm kiếm của một câu lệnh SQL vì vậy việc sử dụng index với where rất quan trọng quyết định tốc độ truy vấn dữ liệu. Mặc dù WHERE là một lệnh ảnh hưởng siêu to khổng lồ tới hiệu năng nhưng nó lại thường không được hiểu đúng, dẫn tới database phải quét qua rất nhiều index. Một lệnh truy vấn chậm thường có nguyên nhân đầu tiên là một lệnh WHERE viết cùi.

Tăng tốc database index phần 4 - Index chậm

Như bài trước đã viết, tốc độ duyệt cây tìm kiếm cân bằng là siêu nhanh, thế mà không hiểu sao mình đã đánh index rồi mà lệnh truy vấn vẫn chậm, mấy thằng cha làm cơ sơ dữ liệu như Larry Ellison nó lừa mình kiếm tiền tỷ phải không? Ngày xửa ngày xưa, từ hồi anh em cây khế còn chơi với nhau, cho tới bây giờ có một giai thoại được truyền tai nhau giữa các dev là index để lâu càng ngày càng chậm, lâu lâu phải rebuild lại index một lần. Thực tế thì không phải như vậy, cây index luôn luôn có một độ sâu cố định và luôn được duy trì ở trạng thái cân bằng. Việc đánh index rồi mà truy vấn vẫn chậm có thể còn hai nguyên nhân nữa. Đầu tiên ta phải hiểu khi truy vấn dữ liệu theo index gồm 3 bước

Tăng tốc database index phần 3 - B-Tree

Index leaf node được lưu trữ theo dạng Linked List về mặt logic, còn về cấu trúc lưu trữ vật lý, mỗi leaf node có thể lưu lung tung, không có thứ tự gì, nó giống một quyền từ điển mà các trang bị xáo trộn, khi ta cần tra từ "Phở" mà đang lật tới trang có từ "Cơm" không có nghĩa là từ Phở chắc chắn ở sau từ Cơm. Để đáp ứng việc tìm kiếm nhanh trong các trang xáo trộn này , database cung cấp một kiểu dữ liệu khác là Cây Tìm Kiếm Cân Bằng (a balanced search tree) gọi ngắn là B-Tree (chú ý các bạn không nên nhầm với Cây nhị phân Binary tree nhé).

Tăng tốc database index phần 2 - Leaf Nodes

Bài trước khái niệm cơ bản

Đầu tiên mình định dịch ra là nút lá, nhưng nghe nó không được hay cho lắm nên quyết định giữ nguyên tên của nó là Leaf Nodes.

Tăng tốc database index phần 1 - khái niệm cơ bản

Phần đầu tiên trong chuỗi bài là các phần liên quan tới database, nhiều bạn thích trình bày các vấn đề khác về database tuy nhiên theo kinh nghiệm cá nhân mình thấy hiểu về index trong db rất quan trọng trong quá trình nâng cao hiệu năng của chương trình, đôi khi chỉ cần đánh index thôi mà tốc độ đang từ rùa bò trở nên tốc độ bàn thờ . Nhưng có phải index luôn giúp truy vấn nhanh hơn không? Đầu tiên là khái niệm index là gì?

Thứ Năm, 12 tháng 1, 2023

Buffer là gì? Sự khác biệt giữa Cache và Buffer

Buffer và Cache có chức năng khá giống nhau, tuy nhiên cả hai lại được ứng dụng để mang lại những lợi ích khác nhau cho hệ thống. Vì vậy, bài viết này sẽ giúp bạn hiểu được Buffer là gì và sự khác biệt giữa nó với Cache.

Thứ Sáu, 6 tháng 1, 2023

Hướng dẫn cài đặt MariaDB Galera Cluster

MariaDB là hệ thống cơ sở dữ liệu quan hệ ( Database Management System) phổ biến hiện nay. Được tách ra mã mở do cộng đồng phát triển của hệ quản trị cơ sở dữ liệu MySQL.

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master