Hành trình đếm sao – 2. Cài đặt môi trường SQL Server

Hành trình đếm sao – 2. Cài đặt môi trường SQL Server

Lưu ý: Bài viết này được đăng lại từ kho lưu trữ cũ nên một số hình ảnh minh họa đã bị mất. Xin lỗi bạn đọc vì sự bất tiện này.

Để bắt đầu hành trình chinh phục và tối ưu hóa các câu lệnh truy vấn, yêu cầu đầu tiên khá đơn giản: chúng ta cần một môi trường SQL Server hoàn chỉnh. Trong các bài viết sắp tới, tôi sẽ hướng dẫn nhiều kỹ thuật và câu lệnh demo có thể tác động mạnh đến tài nguyên cũng như hoạt động của hệ thống. Do đó, nguyên tắc tối thượng của người làm dữ liệu là không bao giờ thử nghiệm trực tiếp trên môi trường Production.
Hãy xây dựng một môi trường độc lập để thực hành. Một chiếc PC hoặc laptop cá nhân là lựa chọn phù hợp nhất. Nếu có điều kiện đầu tư một cỗ máy workstation hoặc server riêng, bạn sẽ có không gian lý tưởng để khai thác tối đa sức mạnh hệ thống, vì một số tính năng nâng cao của SQL Server đòi hỏi CPUs càng nhiều chạy càng mượt.
Tùy thuộc vào vấn đề kỹ thuật đang tìm hiểu mà chúng ta sẽ cần các công cụ khác nhau, nhưng nhìn chung, nền tảng cơ bản luôn bao gồm 3 thành phần:

1. Dịch vụ SQL Server (Database Engine)

Tất nhiên, chúng ta cần cài đặt SQL Server để thực thi các câu lệnh. Tuy nhiên, thay vì chỉ cài một phiên bản duy nhất mà bạn đang dùng ở công ty, tôi khuyến khích cài thêm các phiên bản khác dưới dạng Named Instance.
Nên ưu tiên các phiên bản đánh dấu sự thay đổi lớn về chức năng hoặc kiến trúc lõi. Ví dụ: SQL Server 2012 thay đổi về cơ chế quản lý bộ nhớ, SQL Server 2014 thay đổi hoàn toàn về Cardinality Estimator, các bản mới hơn hỗ trợ In-Memory OLTP, hoặc SQL Server 2017 bắt đầu hỗ trợ Linux. Việc sở hữu nhiều phiên bản trên cùng một máy (sử dụng ấn bản Developer miễn phí) giúp bạn dễ dàng chạy thử một câu truy vấn trên các engine khác nhau, từ đó quan sát và hiểu rõ hơn về hành vi sinh Execution Plan của SQL Server.

2. Trình soạn thảo SQL

Đây là nơi bạn gõ các câu lệnh, gửi đến máy chủ và nhận kết quả trả về. Công cụ quen thuộc và mạnh mẽ nhất chính là SSMS (SQL Server Management Studio).
SSMS cung cấp toàn bộ các tiện ích để cấu hình, giám sát, thiết kế và quản trị hạ tầng SQL Server (bao gồm cả SQL Azure). Nó hoàn toàn miễn phí và bạn có thể tải bản cài đặt độc lập mới nhất trực tiếp từ trang chủ của Microsoft.

3. Cơ sở dữ liệu mẫu

Khi học SQL, mọi người thường dùng AdventureWorks của Microsoft. Tuy nhiên, nó mang nặng tính học thuật và đôi khi không đủ sức gợi sự tò mò. Để việc gõ code trở nên thú vị và mang tính thách thức hơn, tôi giới thiệu với các bạn một cơ sở dữ liệu "người thật việc thật": bản dump dữ liệu từ trang stackoverflow.com.
Nếu bạn chưa biết, đây là diễn đàn hỏi đáp lớn nhất thế giới dành cho dân lập trình, với hàng chục triệu câu hỏi và câu trả lời. Cơ sở dữ liệu của họ được chia sẻ miễn phí cho mục đích học thuật. Cảm giác dùng SQL để bóc tách dữ liệu thật sự luôn mang lại sự phấn khích. Bạn có thể tự mình trả lời những câu hỏi như: "Có bao nhiêu lập trình viên đến từ Việt Nam?", "Người dùng ở TP.HCM hoạt động sôi nổi ra sao?", hay "Ai là người chuyên đặt câu hỏi mà không bao giờ quay lại trả lời?".
Bạn có thể tìm kiếm và tải các bản dump của StackOverflow trên internet. Phiên bản càng mới, kích thước càng "khủng". Nếu máy tính có ổ cứng lớn và cấu hình mạnh, bạn có thể tải bản mới nhất để luyện kỹ năng tối ưu truy vấn trên dữ liệu lớn. Ở đây, để nhẹ nhàng hơn, tôi sử dụng bản dump năm 2010 (file nén khoảng 1GB, khi bung ra chiếm khoảng 10GB dung lượng đĩa).
Cách đưa dữ liệu vào hệ thống:Sau khi tải và giải nén, bạn sẽ thấy file hướng dẫn Readme_2010.txt cùng hai file cốt lõi là .mdf và .ldf. Hãy copy chúng vào thư mục lưu trữ của bạn. Để đưa vào hệ thống, mở SSMS, kết nối vào SQL Server. Trong cửa sổ Object Explorer, nhấp chuột phải vào mục Databases > chọn Attach. Tại cửa sổ mới, nhấn nút Add, trỏ đường dẫn tới file .mdf vừa copy, đổi tên database nếu muốn và nhấn OK.

Thử nghiệm những câu truy vấn đầu tiên

Giờ thì môi trường đã sẵn sàng, hãy gõ vài câu SQL để "thưởng thức" thành quả.
Ví dụ, hãy thử tìm 1000 user bất kỳ có chứa từ khóa 'Vietnam' trong phần vị trí:
SQL

USE StackOverflow2010;
GO
 
SELECT TOP 1000 *
FROM Users
WHERE location LIKE '%Vietnam%';

Kết quả trả về có thể chỉ loanh quanh khoảng hơn 200 dòng. Nguyên nhân có thể do người dùng gõ vị trí không nhất quán. Bạn hãy thử đổi điều kiện thành 'Viet Nam' hoặc tên các tỉnh thành cụ thể xem kết quả có cải thiện không nhé.
Tiếp theo, hãy thử điều tra xem user có ID 607 đã từng hỏi những gì:
SQL

SELECT TOP 10 *
FROM Posts 
WHERE OwnerUserId = 607 AND PostTypeId = 1;

Lưu ý rằng cột PostTypeId = 1 dùng để định danh câu hỏi, còn PostTypeId = 2 là câu trả lời. Câu truy vấn này bắt đầu cho thấy sức nặng của dữ liệu thực tế: trên cấu hình 4 CPUs, 16GB RAM ổ SSD, hệ thống có thể mất tới hơn 20 giây để quét và trả về kết quả.
Bây giờ, hãy thử đổi lại để xem các câu trả lời của user này:
SQL

SELECT TOP 10 *
FROM Posts 
WHERE OwnerUserId = 607 AND PostTypeId = 2;

Nếu bạn thắc mắc làm sao để ráp nối một câu trả lời vào đúng câu hỏi của nó, hay bảng Comments có mối quan hệ như thế nào với bảng Posts, hãy tự mình khám phá cấu trúc các bảng này.
Vậy là chúng ta đã hoàn tất việc thiết lập một "phòng thí nghiệm" hoàn hảo cho SQL Server. Hy vọng cơ sở dữ liệu StackOverflow sẽ mang lại cho bạn nhiều cảm hứng hơn trong hành trình đào sâu vào thế giới dữ liệu sắp tới.