MySQL cũng là 1 hệ quản trị CSDL hoạt động theo mô hình client – server, trong đó có 1 chương trình chính đóng vai trò là server quản trị database, cho phép các client kết nối vào thao tác dữ liệu.

 

Client có thể kết nối vào MySQL server theo các giao thức:

  • TCP/IP: giao thức phổ biến nhất
  • Unix socket
  • Named pipes
  • Shared memory

 

Client kết nối đến MySQL Server có thể sử dụng thư viện C, hoặc các thư viện kết nối khác (ODBC, JDBC, PHP driver…).

 

Khi cài đặt MySQL, các thành phần sau đây thường sẽ được cài đặt:

  • MySQL Server: mysqld
  • Các client program đi kèm: mysql, mysqladmin, mysqlcheck, mysqldump, mysqlimport…
  • Non-client utilities (thao tác trực tiếp với database): myisamchk, myisampack…

 

Kiến trúc hệ thống 

 

Kiến trúc bên trong MySQL được chia thành nhiều hệ thống nhỏ (subsystem), mỗi hệ thống sẽ tiếp nhận thông tin từ hệ thống khác, xử lý phần việc của mình, và trả kết quả cho hệ thống tiếp theo tiếp tục xử lý.

 

Mô hình kiến trúc cơ bản của MySQL Server

Mô hình kiến trúc cơ bản của MySQL Server

 

Core shared subsystems

 

Đây là các hệ thống đóng vai trò quản lý hoạt động của MySQL Server, bao gồm:

  • Base function library: thư viện hàm phục vụ cho hoạt động của hệ thống MySQL trong việc làm việc với OS, sử dụng memory, giao tiếp với phần cứng…
  • Process, Thread, and Resource Management: MySQL sử dụng kiến trúc multi-thread, từ process chính sẽ tạo ra nhiều thread để hoạt động, do đó hệ thống hoạt động sẽ ít tốn kém tài nguyên hơn, nhẹ nhàng hơn. Subsystem này có nhiệm vụ quản lý các thread và việc các thread sử dụng resource trên hệ thống như thế nào
  • Cache and Buffer Management: quản lý các phần bộ nhớ hoạt động như Thread Cache, Buffer Cache, MEMORY tables…
  • Networking Management: quản lý việc kết nối giao tiếp giữa MySQL Server và client thông qua các giao thức, ngoài các giao thức ở trên thì còn có khả năng quản lý cả SSL
  • Log Management: quản lý việc ghi log hoạt động của database
  • Access and Grant Management: quản lý việc xác thực user, phân quyền, kiểm tra quyền khi thực thi câu lệnh…

 

Query parsing, Optimization & Execution

 

Đây là các subsystem thực hiện việc xử lý các câu lệnh SQL:

  • Query parsing: phân tích câu lệnh SQL thành cú pháp sử dụng bên trong MySQL
  • Optimization: tìm ra cách thực thi câu lệnh (execution plan) tốt nhất
  • Execution: thực thi câu lệnh theo execution plan đã được chọn, và trả về kết quả cho client

 

Query cache

 

Query cache có khả năng lưu trữ 1 số lượng câu lệnh SQL đã thực thi, cũng như kết quả của 1 số câu lệnh hay thực thi, để giúp giảm thiểu thời gian thực thi lại 1 số câu lệnh thường xuyên.

 

Storage Engine Implementations

 

Subsystem này bao gồm nhiều handler, cho phép MySQL truy vấn, xử lý và lưu trữ dữ liệu dưới nhiều format khác nhau. Ta sẽ tìm hiểu chi tiết hơn ở phần tiếp theo.

 

Hoạt động cấp phát memory

 

Khi MySQL start, 1 bộ nhớ chia sẻ sẽ được cấp phát trên instance (per-instance memory). Bộ nhớ này có thể được dùng chung cho các hoạt động của database server, cũng như các session trên hệ thống. Khi sử dụng hết, hệ thống phải chuyển qua sử dụng bộ nhớ swap, dẫn đến giảm hiệu năng hoạt động của database server, cũng như có thể gây crash hệ thống. Bộ nhớ này sẽ được giải phóng khi shutdown MySQL.

Ngoài ra, mỗi session khi khởi tạo cũng được cấp phát 1 phần bộ nhớ riêng (per-session memory) để sử dụng, và sẽ được thu hồi khi session kết thúc.

 

Kiến trúc memory

 

Thread cache

Mỗi client khi kết nối đến, database server sẽ tạo ra 1 thread để phục vụ cho client đó. MySQL sử dụng Thread Cache để quản lý các thread này. Khi 1 thread phục vụ xong client sẽ được trả về Thread Cache. Nếu có client mới sẽ ra phục tiếp. Việc này giúp giữ được số thread hợp lý.

 

Buffer and Caches

Ngoài Query cache, MySQL còn có các bộ nhớ buffer & cache khác phục vụ cho hoạt động database như grant table buffers, MyISAM key buffers, InnoDB buffer pool, hay table open cache…

 

MEMORY tables

Phần bộ nhớ dùng cho các table được tạo theo storage engine Memory, dữ liệu sẽ bị mất đi khi database shutdown. 

 

Internal temporary tables

Phần bộ nhớ dùng cho hệ thống tạo các bảng tạm khi hoạt động. Nếu dùng hết, hệ thống sẽ phải chuyển qua dùng bảng tạm MyISAM trên disk.

 

Client specific buffers

Các phần buffer phục vụ cho hoạt động của client như communication buffer để trao đổi thông tin, table read buffer, join buffer, sort buffer…