Trang chủTác giảLiên hệ

MySQL Architecture ( Part 1)

By Đặng Văn Hiến
Published in MySQL
June 09, 2021
3 min read

Đang ngâm cứu quyển sách High Performance MySQL nên vừa đọc vừa viết nên đây để trao đổi cùng mọi người cho dễ hiểu.

Câu chuyện cải thiện hiệu năng của MySQL thì gần như các bạn dev nào cũng từng nghe thấy và cũng đã từng phải giải quyết. Muốn đưa ra được phương phán chính xác thì phải hiểu được cấu trúc của MySQL. Chính vì thế phần đầu tiên thì chúng ta sẽ đi tìm hiểu các thành phần, cấu trúc của hệ quản trị cơ sở dữ liệu MySQL

MySQL’s Logical Architecture

Bức ảnh dưới đây sẽ giúp cho chúng ta dễ dàng hình dung ra được các component trong mysql sẽ hoạt động cùng vs nhau như thế nào.

Tầng trên cùng không chỉ chứa mỗi MySQL. Ở đây hầu hết các services như là các tool network-base client/server hoặc servers cần như là connection handling, authentication, security…

alt text

Ở tầng thứ 2 chính là nơi mà sẽ chứa những cái mà chúng ta sẽ tìm hiểu. Ở đây là chính là phần xử lý chính của MySQL nó bao gồm code của phần query parsing, analysis, optimization, caching và tất cả các build in functions( ví dụ như là dates, times, math, encryption). Mọi chức năng cung cấp kết nối vs storage engines tồn tại ở cấp độ này như là stored procedures, triggers, and views…

Ở tầng thứ 3 chính là storage engines. Nó có vai trò là lưu trữ và nhận tất cả data lưu vào trong MySQL. Giống như hầu hết các hệ thống filesystem cho GNU/Linux thì mỗi storage engine đều có ưu và nhược điểm riêng. Server communicates sẽ kết nối thông qua storage engine api. Do đó nó có thể ẩn được khác biệt giữa các storage engine và không liên quan đến tầng query layer. Các API chứa nhiều các low-level functions giúp thực hiện các chức năng như là “begin a transaction” or “fetch the row that has this primary key.” . Do đó storage engines không parese SQL hoặc là communication vs các phần khác, đơn giản chỉ là trả lời các yêu cầu từ server.

Connection Management and Security

Mỗi client connection sẽ tạo một luồng riêng ở bên trong server process. Mỗi query của connections sẽ thực hiện ở một theard riêng rẽ, nó sẽ nằm trên core hoặc là CPU. Mỗi server sẽ lưu lại threads nên nó sẽ ko cần tạo vs destroy cho mỗi connection mới.

Khi mà client kết nối tới mysql server thì server cần authen các connection này. Việc xác thực thì sẽ dựa trên username, host và password. X.509 certificates cũng có thể sử dụng thông qua một SSL Connecton. Mỗi client có một kết nối vs server sẽ verify được client sẽ có quyền thực thi các thao tác gì ( ví dụ như chỉ được read mà ko được write data…)

Optimization and Execution

MySQL sẽ phân tích queries vào một cấu trúc bên trong( cây phân tích cú pháp) và sẽ áp dụng vào các phương pháp tối ưu. Trong đấy có thể như là viết lại câu query, xác định order sẽ đọc trogn tables, chọn index được sử dụng… Bạn cũng có thể yêu cầu optimizer thông qua các keyword đặc biệt trong câu query, nó sẽ ảnh hưởng đến quá trình quyết định khi xử lý. Bạn cũng có thể yêu cầu server giải thích các khía cạnh khác nhau đang được dùng để xử lý query. Từ đấy bạn có thể biết được các server quyết định xử lý vì thế mà bạn có thể đưa ra các action để cải thiện queries, schemas và các setting đảm bảo mọi thứ chạy hiệu quả nhất có thể.

Trình optimizer không quan tâm storage engine nào được sử dụng ở một bảng cụ thể, tuy nhiên thì storage engine cũng ảnh hưởng đến việc server làm thế nào để optimizes câu query. Trình optimizer sẽ hỏi storage engine về lưu trữ và cost thực thi các hoạt động để thống kê dữ liệu table. Ví dụ một số engines có thể support kiểu index có thể hữu ích với một số câu queries.

Trước khi mà parsing câu query thì server sẽ tra cứu trong query cache( nơi chỉ lưu những câu select cũng như kết quả của nó). Nếu bất cứ ai mà thực hiện các câu query đã được lưu trong cache thì server sẽ ko cần parse, optimize hoặc là thực thi câu query mà chỉ cần đơn giản là trả về cái kết quả đã lưu lại trước đó. Phần này mình cũng sẽ tìm hiểu ở phần sau.

Next Part

Ở phần tiếp theo chúng ta tiếp tục tìm hiểu về Concurrency Control, Read/Write Locks, Lock Granularity, Table locks, Row locks

Tham khảo: Here


Đặng Văn Hiến

Related Posts

MySQL
[MySQL] Transactions
June 08, 2021
2 min
© 2021, All Rights Reserved.

Quick Links

Liên hệ quảng cáoThông tinLiên hệ

Social Media