Archive for the ‘Bên trong SQL Server’ Category

 

Log File Để Làm Gì

Khi bạn dùng Microsoft Word, bạn để ý thấy có một file tạm nằm cùng trong folder với file chính. Nếu windows bị shutdown đột ngột file tạm vẫn nằm ở đó, còn khi bạn soạn thảo xong và đóng Word lại thì file đó tự động bị xóa. File tạm này dùng cho các chức năng như autosave, recovery khi bị đóng đột ngột, undo… Log file trong SQL Server cũng có chức năng giống như file tạm đó, nhưng ở mức tinh vi hơn. Nó đóng góp rất nhiều vai trò trong tính năng ACID của hệ thống (ACID = Atom – nguyên tử, Consistency – toàn vẹn, Isolation – cô lập, và Durability – bền bỉ). Với Word thì đó chỉ là tính năng tiện lợi cho người dùng, còn với SQL Server thì đó là cam kết của hệ thống đối với dữ liệu và các giao dịch thực hiện trên nó.
Khi nhận được một lệnh cập nhật dữ liệu, các bước sau sẽ xảy ra bên trong hệ thống: … đọc tiếp »

Posted on 31/10/2014 by Vũ Huy Tâm | Categories: Bên trong SQL Server, Database Administration

Tham Số Fill Factor

Trong buổi Seminar lần trước, có bạn đã hỏi ý nghĩa của tham số FILL FACTOR là gì và sử dụng nó có ý nghĩa như thế nào. Bẵng đi gần 2 năm, gần đây tôi có làm việc lại với SQL Server và đụng chạm đến tham số này.

I. Rebuild và Reorganize Index

Với những bảng có sử dụng Index mà những thao tác cập nhật, thêm dữ liệu (UPDATE, INSERT) xảy ra nhiều thì những Index trên bảng đó sẽ bị phân mảnh. Sự phân mảnh của Index được chia làm 2 loại:
Internal Fragmentation: Khi trang nhớ (Page) lưu Index có nhiều khoảng trống, dẫn đến việc SQL Server sẽ phải mất thêm nhiều chi phí (cần phải đọc nhiều trang hơn) khi quét qua toàn bộ Index.
Để dễ hình dung, bạn có thể hiểu nếu toàn bộ nội dung của Index có kích thước tương đương với 5 trang nhớ, nhưng mỗi trang nhớ chỉ lưu được 50%, như vậy cần tới 10 trang đế lưu index và bạn sẽ phải quét qua tổng cộng 10 trang này khi cần đọc toàn bộ index. Chi phí sẽ tăng lên gấp đôi so với trường hợp tối ưu. … đọc tiếp »

Các Cơ Chế Thực Thi Lệnh JOIN

Tiếp theo bài Các Loại JOIN Trong SQL Server, bài này giới thiệu về các cơ chế bên trong SQL Server sử dụng để xử lý các câu truy vấn JOIN. Về cơ bản khi thực hiện câu lệnh JOIN, SQL Server duyệt qua hai bảng tham gia vào, lấy ra từng cặp bản ghi để so sánh, rồi trả về tập kết quả nếu thỏa mãn điều kiện JOIN hoặc loại bỏ nếu không thỏa mãn. SQL Server cài đặt một vài thuật toán khác nhau, thích hợp với các tình huống khác nhau (như số lượng bản ghi cần so sánh nhiều hay ít, cột JOIN có index hay không…). Các thuật toán đó là Nested Loop Join, Merge Join, và Hash Join. … đọc tiếp »