Tìm hiểu các khái niệm trong quản lý luồng (thread management) của SQLOS Trong bài viết này Stanford sẽ giới thiệu đến các bạn học SQL các khái niệm quản lý luồng của SQLOS trong hệ quản trị cơ sở dữ liệu SQL Server giúp bạn hiểu rõ cơ chế hoạt động của SQL Server. SQL Server là gì ? SQL Server là gì đã trở thành một trong những mối quan tâm hàng đầu của mọi người khi tìm hiểu về công nghệ thông tin. SQL Server, viết tắt của Microsoft SQL Server hoặc MS SQL Server, là một ứng dụng phần mềm do Microsoft phát triển. Nó được thiết kế để quản lý và lưu trữ dữ liệu theo mô hình quan hệ RDBMS (Relational Database Management System). Thành phần chính của SQL Server MS SQL Server bao gồm hai thành phần chính Database Engine và SQLOS (SQL Server Operating System). Database Engine là thành phần trung tâm của SQL Server, chứa hai phần chính: Relation Engine và Storage Engine. Relation Engine chịu trách nhiệm xử lý các truy vấn từ người dùng và ứng dụng. Storage Engine, trong khi đó, quản lý việc lưu trữ cơ sở dữ liệu bằng cách quản lý các tệp cơ sở dữ liệu, trang dữ liệu, chỉ mục, và nhiều khía cạnh khác của dữ liệu. SQLOS, viết tắt của SQL Server Operating System, quản lý việc quản lý bộ nhớ và I/O, lên lịch thực hiện các nhiệm vụ, và quản lý các khóa dữ liệu để đảm bảo tính toàn vẹn và tránh xung đột dữ liệu khi có các thay đổi dữ liệu đồng thời. Từ version 2005 trở đi, kiến trúc của SQL Server có thêm một lớp chịu trách nhiệm cho việc lập lịch và quản lý luồng (thread management and scheduling) độc lập với hệ điều hành của máy chủ và thường được gọi là SQLOS. Trong bài viết này chúng ta sẽ làm quen với một vài khái niệm liên quan như Tasks, Workers, Threads, Scheduler, Sessions, Connections, Requests. Hình 1: Thể hiện schedulers nằm ở SQLOS layer. 1. SQLOS Scheduler – Bộ Lập Lịch Khi SQL Server khởi động nó sẽ tạo một scheduler tương ứng với mỗi logical processor mà nó thấy trên máy chủ. Tùy theo số lượng CPU được cấp phát cho SQL Server (Processor Affinity setting) mà những schedulers này có trạng thái enabled hoặc disabled. Các bạn có thể kiểm tra trạng thái ở DMV sys.dm_os_schedulers. Scheduler là đối tượng sẽ lập lịch và cho phép các worker thread tiếp xúc với CPU để được xử lý. 2. Tasks – Tác vụ Một tác vụ (sys.dm_os_tasks) đại diện cho một đơn vị công việc cần được thực hiện. Một request đến SQL Server có thể được chia thành một hoặc nhiều tasks và đây chỉ là một đơn vị logic mà bản thân task sau đó được gán cho worker thread mới có thể hoàn thành request của client. 3. Workers (Worker Threads) Worker threads chính là luồng của SQLOS tạo ra và lập lịch để thực hiện request từ clients. Worker thread sẽ làm việc trực tiếp với scheduler và hoàn thành các đơn vị công việc từ các tasks cung cấp. Số lượng worker threads trong một instance là có hạn và nếu kiểm soát không bạn sẽ gặp tình trạng chờ THREADPOOL. Các worker threads đã được tạo ra trên SQL Server instance cụ thể ở DMV sys.dm_os_workers. 4. Thread – Luồng Đây là những thread chạy bên dưới (thuộc) process của SQL Server được tạo và quản lý bởi hệ điều hành máy chủ và được lưu trữ trong SQL Server thông qua DMV sys.dm_os_threads. Những threads này ánh xạ 1-1 với worker thread (SQLOS). 5. Request – Yêu cầu Mỗi khi chúng ta gửi một batch (ngăn cách bằng lệnh GO trong SSMS) lên SQL Server thì đó là một request. Kế đến request này sẽ được gán cho một task và task này sẽ gắn vào một worker thread để có thể làm việc với scheduler. Bạn có thể khảo sát những request này thông qua DMV sys.dm_exec_requests. 6. Session – Phiên Làm Việc khi client kết nối với SQL Server, hai bên thiết lập một “phiên” để trao đổi thông tin. Nói một cách chính xác thì một phiên không giống như một kết nối vật lý bên dưới, nó là một thể hiện logic của một kết nối đến SQL Server. Mỗi một phiên được gán một số định danh thường được gọi là session_id. Bạn có thể thấy tất cả những phiên hiện có trong DMV sys.dm_exec_sessions và Microsoft phân định những session_id nhỏ hơn 50 là của hệ thống được dùng để chạy các tác vụ nội bộ như LazyWriter, Checkpoint, Log Writer, Service Broker,…và những phiên này không có connection tương ứng. 7. Connections – Kết nối Đây là kết nối vật lý thực tế theo đúng nghĩa đen của nó. Mỗi một kết nối từ client đến SQL Server được thể hiện trong DMV sys.dm_exec_connections. Ứng với mỗi connection này sẽ có một phiên (và tất nhiên session_id) được tạo ra tương ứng. Một connection_id trong sys.dm_exec_connections là một GUID và được sử dụng để xác định duy nhất kết nối vật lý đó. Chúng ta không sử dụng connection_id để xác định phiên nào đang thực hiện truy vấn mà thường là một session_id. Như vậy qua bài viết này Stanford đã giúp bạn hiểu rõ hơn về các khái niệm trong quản lý luồng (thread management) của SQLOS trên SQL Server mà với các bạn đang học quản trị SQL Server cần nắm rõ để hiểu được cơ chế làm việc của SQL Server. Bên cạnh đó nếu bạn đang muốn được đào tạo bài bản từ cơ bản đến nâng cao có thể tham gia ngay khóa học sql cùng chuyên gia giàu kinh nghiệm Stanford tại đây: http://bit.ly/2SLPYFF và nhận ưu đãi hấp dẫn của Stanford trong thời gian này. Bạn có thể gọi theo hotline: 0963 723 236 - 0866 586 366 để được gọi lại tư vấn trực tiếp nhé. ============================= ☎ STANFORD – ĐÀO TẠO VÀ PHÁT TRIỂN CÔNG NGHỆ Hotline: 0963 723 236 - 0866 586 366 Website: https://stanford.com.vn Facebook: http://bit.ly/2FN0TYb Youtube: http://bit.ly/2TkKT7I Tags: tìm hiểu sqlos, các khái niệm trong sqlos