Cách làm giảm dung lượng Log file trong Sql Server

Cách làm giảm dung lượng Log file trong Sql Server

Làm thế nào để làm giảm dung lượng Log file trong Sql Server?

Ở bài trước, ta có nhắc tới vai trò của Log file Sql server, cũng như cách thức hoạt động của nó.

Tuy nhiên, ta nhận thấy rằng vì log file cần phải chứa toàn bộ dữ liệu trước và sau giao dịch, nên nó có thể phình rất to nếu câu lệnh (hoặc nhiều câu lệnh gom trong một transaction) tác động đến một lượng dữ liệu lớn. Vì vậy, nó sẽ làm ổ cứng của bạn nhanh chóng trong tình trạng Full Disk, ổ cứng luôn trong tình trạng đỏ lòm, đến 1 lúc nào đó, phần mềm sẽ không thể thao tác được hơn nữa. Thật kinh khủng đúng không nào!

Có rất nhiều cách để giải quyết vấn đề này

Cách 1. Detach DB, xóa file LOG, sau đấy ATTACH lại DB
Tuy nhiên với CSDL đòi hỏi tính sẵn sàng cao, thì ko mấy ai cho phép bạn làm điều này.

Cách 2. Backup LOG với OpTION là TRUNCATE_ONLY hoặc NO_LOG
Với phiên bản SQL Server 2008 thì đã bỏ Option này

Tôi thường sử dụng cách thứ 3:

B1. Trước tiên, phải xác định được tên Database cần xóa log và tên 2 file MDF, LDF

Để kiểm tra tên file MDF, LDF, ta click chuột phải vào Database và chọn Properties

Ví dụ ta có 1 DB tên TOPOS_M2 như hình với 2 file MDF: AVG_Data và LDF: AVG_Log

Bước 2: Xóa log file

Giải thích

– Có 3 chế độ Recovery trong SQL Server , FULL, SIMPLE và BULK LOGGED

Chế độ mặc định là FULL.
Bạn có thể vào phần Option của DB, xem trong Recovery Model.

Khi ở chế độ này,  bất kì một transaction nào, kể cả khi đã commit cũng đều được lưu trong LOG, do đó có thể dựa vào những transaction này để “(rollback)” DB về bất kì thời điểm nào. Vì thế với những DB có Transaction nhiều, DATA ít thì file LOG vẫn có thể rất lớn.

– Đầu tiên SET RECOVERY của DB về SIMPLE, ở chế độ này, sau khi transaction được COMMIT, sẽ tự động xóa. Do vậy File LOG của DB ở chế độ này thường rất nhỏ.

– Dùng DBCC SHRINKFILE để SHRINK file log xuống còn 1 Mb
Nếu không set Recovery về SIMPLE, thì sẽ ko thể xóa bỏ hết các transaction đã được COMMIT.
SHRINKFILE chỉ thu dọn và sắp xếp  và phân bố lại dữ liệu, bỏ các vùng trống để giải phóng bộ nhớ, chứ không phải xóa dữ liệu. Vì thế ở chế độ FULL, SHRINKFILE hầu như ko tác dụng, hoặc nếu có thì file LOG dung lượng giảm đi ko đáng kể.

– Sau đó SET RECOVERY về lại FULL

Trên MSDN cũng khuyên nếu muốn Backup LOG, các bạn nên chuyển về chế độ SIMPLE, hơn là backup LOG với Truncate_Only và No_LOG

Cấu trúc lệnh xóa như sau:

USE TOPOS_M2 ;
GO
ALTER DATABASE TOPOS_M2 SET RECOVERY SIMPLE;

GO
DBCC SHRINKFILE (AVG_Log, 1);
GO
ALTER DATABASE TOPOS_M2 SET RECOVERY FULL;
GO

* Chú ý: Với những DB lớn, có kế hoạch Backup riêng, bạn cần hỏi ý kiến của DBA trước khi thực hiện. Vì một vài chế độ BackUp dựa rất nhiều vào file LOG.

Tuy nhiên nếu có DBA, thì không bao giờ để xảy ra trường hợp này, vì công việc của họ là thường xuyên theo dõi, giám sát và xử lý  để Server hoạt động tốt.

 

 

 

 

Vai trò của Log file trong SQL Server

Log file SQL Server để 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:


Bước 1. Các trang chứa các bản ghi bị ảnh hưởng được tải vào bộ nhớ. Trong trường hợp đối với INSERT thì các trang được tạo ngay trong bộ nhớ vì lúc này chưa có dữ liệu ở đĩa. Bước này được thực hiện giống hệt như đối với một lệnh SELECT, vì thế index giúp tăng hiệu năng câu truy vấn SELECT như thế nào thì nó cũng giúp câu lệnh UPDATE/DELETE như thế.

Bước 2.  Dữ liệu được cập nhật trong memory page (các trang trong bộ nhớ). Nếu là DELETE thì bản ghi được đánh dấu xóa. Các memory page được đánh dấu là “bẩn” (dirty page). Đồng thời, nội dung giao dịch được ghi vào log file. Mỗi bản ghi dữ liệu bị ảnh hưởng sẽ có một bản ghi tương ứng trong log file, và bản ghi trong log file bao gồm chi tiết hành động (UPDATE, DELETE, hay INSERT), dữ liệu trước khi xảy ra hành động, và dữ liệu sau khi xảy ra hành động. Đến thời điểm này, chưa có gì xảy ra đối với data file. Cơ chế này gọi là Write-Ahead-Log (hay gọi tắt là WAL), nghĩa là các thao tác đều được lưu vào log file trước tiên.

Bước 3. Trong SQL Server có một tiến trình độc lập gọi là checkpoint. Tiến trình này định kỳ quét bộ nhớ và ghi các trang bẩn ra đĩa (data file) và đánh dấu chúng lại là “sạch”. Nếu lệnh cập nhật ở trên kéo dài, checkpoint có thể xảy ra trong khi lệnh vẫn đang được thực hiện. Điều này không có gì bất ổn và các trang bẩn tại thời điểm đó được đẩy ra đĩa. Checkpoint giúp tăng hiệu năng I/O của hệ thống vì nó đẩy các trang bẩn ra đĩa thành từng bó 32 trang. Nếu mỗi trang bẩn đều tự động được đẩy ra đĩa tức thì, I/O sẽ trở nên quá bận bịu với các yêu cầu ghi đơn lẻ. Checkpoint cũng tạo một bản ghi trong log file, tất nhiên với nội dung là “CHECKPOINT”. Điều này cực kỳ quan trọng vì nó cần cho quá trình khôi phục (recovery) mà tôi sẽ nói thêm ở phần dưới.
– Nếu câu lệnh cập nhật kết thúc tốt đẹp, log file được tạo thêm một bản ghi với nội dung “COMMIT” để xác nhận giao dịch đã được COMMIT. Vai trò của log file đến đây là xong, cho dù dữ liệu mới cập nhật chưa được ghi hết ra data file. Checkpoint sẽ làm nốt việc đó. Nếu có một câu truy vấn khác động đến các bản ghi này, nó sẽ đọc thẳng từ bộ nhớ và không cần dùng đến đĩa.
– Nếu có sự cố nào đó (ví dụ gặp một bản ghi vi phạm ràng buộc khóa ngoại), toàn bộ lệnh cập nhật sẽ được ROLLBACK. Việc ROLLABACK đơn giản là lấy mỗi bản ghi trong log file và cập nhật lại giá trị cũ vào data file, và các trang bẩn được reset lại thành sạch.

Bạn để ý trong bước 3 ở trên, kể cả sau khi câu lệnh thực hiện xong và dữ liệu đã được COMMIT, dữ liệu mới chưa hẳn đã được ghi hết ra data file vì chưa đến kỳ checkpoint. Vậy điều gì sẽ xảy ra nếu hệ thống bị shutdown đột ngột (ví dụ mất điện)? Đây chính là yếu tố D – Durability trong ACID, theo đó hệ thống cam kết rằng một khi giao dịch của quí vị đã được COMMIT thì dữ liệu của quí vị sẽ nằm trong đĩa kể cả khi bị cúp điện ngang lưng. Khi hệ thống khởi động trở lại, tiến trình Recovery sẽ rà soát các log record trong log file, và tất cả các bản ghi của các giao dịch đã được COMMIT xảy ra sau lần checkpoint cuối cùng sẽ được cập nhật sang data file. Khi bạn thấy database ở chế độ RECOVERY sau khi hệ thống khởi động lại đột ngột, chính là để nó hoàn tất các cập nhật này, và bạn không truy cập được database cho đến khi recovery xong.

Trong bài này tôi chỉ nêu ví dụ với các lệnh cập nhật dữ liệu, nhưng cơ chế cũng giống như vậy với các lệnh về cấu trúc database như CREATE TABLE hay ALTER INDEX. Vì log file cần phải chứa toàn bộ dữ liệu trước và sau giao dịch, nên nó có thể phình rất to nếu câu lệnh (hoặc nhiều câu lệnh gom trong một transaction) tác động đến một lượng dữ liệu lớn. Thời gian rollback khi gặp sự cố cũng kéo dài hơn. Do đó khi viết chương trình bạn nên giảm tối thiểu kích thước transaction có thể được.

Xem thêm: Cách làm giảm dung lượng Log File trong SQL Server

 

Giới hạn Ram sử dụng cho SQL Server

Giới hạn Ram sử dụng cho SQL Server

Giới hạn Ram sử dụng cho SQL Server như thế nào?

Đối với dữ liệu và tầng xuất truy cập lớn, SQL sẽ cache vào memory server bạn để việc truy cập dữ liệu nhanh hơn.

Tuy nhiên điều này cũng gây không ít phiền toái, dần dần SQL Instance sẽ ngốn hết RAM server của bạn, không còn tài nguyên để thực thi các ứng dụng khác và cả hệ điều hành.

Mặc định khi cài đặt SQL Server Instance Microsoft thiết lập cho phép Instance sử dụng tối đa dung lượng RAM có trên server của bạn. Chúng ta có thể thiết lập lại giới hạn maximum bộ nhớ mà SQL Instance có thể sự dụng để đảm bảo còn tài nguyên cho các ứng dụng khác và Windows OS.

Có hai cách thiết lập :

Cách 1: Dùng TSQL cập nhật thông tin Memory vào hệ thống

EXEC sys.sp_configure N’show advanced options’, N’1′ RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N’max server memory (MB)’, N’2048′
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N’show advanced options’, N’0′ RECONFIGURE WITH OVERRIDE
GO

Cách 2: Dùng Tools có sẳn của Microsoft Sql Server

Bước 1: Click chuột phải vào Instance và chọn Properties

Bước 2: Trên form Server Properties, lựa chọn mục Memory và thiết lập các thông số phù hợp

Các bước chi tiết theo hình:

Bí quyết làm giàu từ tay trắng

Bí quyết làm giàu từ tay trắng

Grant Cardone là tác giả của nhiều cuốn sách kinh doanh trong danh sách “best-seller book” của New York Time, đồng thời là nhà kinh doanh, chuyên gia bán hàng, chuyên gia tư vấn cho nhiều công ty nằm trong danh sách Fortune 500 (các công ty hàng đầu tại Mỹ). Những chia sẻ dưới đây của ông được coi là bí quyết “gối đầu giường” cho những ai mơ ước trở thành triệu phú.

Những bí quyết sau đây không chỉ cho bạn cách để tích lũy của cải cả một đời để tận hưởng khi về già mà là tạo ra hàng triệu đô la và tận hưởng chúng ngay trong quá trình lao động.

Điều 1: Quyết định trở thành một triệu phú

Trước tiên, bạn phải xác định mục tiêu cao nhất của bạn, là trở thành một triệu phú từ tay trắng.

Tôi đi từ chỗ không có gì, chỉ là ý tưởng và rất nhiều công việc khó khăn để tạo ra một gia tài và những giá trị bền vững khác.

Bước đầu tiên là thiết lập mục tiêu. Mỗi ngày trong suốt nhiều năm, tôi đều viết ra câu này: “Tôi trị giá hơn 100.000.000 đô la”.

Điều 2: Thoát khỏi tư duy nghèo nàn

Thế giới này không thiếu tiền mà thiếu những người có suy nghĩ đúng đắn về nó. Để trở thành một triệu phú, bạn phải chấm dứt những tư duy nghèo nàn và tiêu cực. Nếu bạn chìm đắm trong đó, bạn không thể làm giàu.

Tôi biết rõ điều này bởi vì tôi đã từng trải qua. Tôi được nuôi dưỡng bởi một bà mẹ độc thân. Mẹ tôi đã làm tất cả mọi thứ để cho ba anh em chúng tôi được đến trường.

Tuy vậy, nhiều bài học mà bà dạy tôi mang đến cảm giác thiếu thốn và sợ hãi: “Con đừng bỏ lại thức ăn, ngoài kia còn có nhiều người chết đói”, “Con đừng lãng phí bất cứ thứ gì”, “Tiền không mọc trên cây con à”.

Sự giàu có và trù phú không nảy sinh từ những suy nghĩ tương tự như vậy.

Điều 3: Xem việc làm giàu là một nghĩa vụ

Những người nỗ lực làm giàu từ tay trắng không chỉ vì tiền bạc mà còn vì nhu cầu được xã hội công nhận khả năng và những đóng góp của mình. Tôi luôn muốn làm giàu, nhưng tôi cũng có nhu cầu đóng góp cho xã hội tùy theo khả năng của mình.

Triệu phú không hạ mục tiêu khi gặp khó khăn, thay vào đó, họ nâng cao kỳ vọng cho chính mình bởi vì họ nhìn thấy sự khác biệt mà mình có thể đem đến cho gia đình, công ty và cộng đồng.

Điều 4: Học theo người giàu

Tôi đã nghiên cứu tất cả mọi điều về những người giàu có kể từ khi tôi 10 tuổi. Tôi đọc câu chuyện của họ và xem họ đã trải qua những gì. Họ là những cố vấn, những người thầy truyền cảm hứng cho tôi. Bạn không thể biết cách kiếm tiền từ những người không có tiền.

Có người nào đó khẳng định “Tiền sẽ không làm cho bạn hạnh phúc”, hay “Tất cả những người giàu đều tham lam”. Tôi chắc chắn những người đó không phải là những người giàu. Những người giàu có không hề có cách nhìn như vậy.

Vì thế, bạn cần biết người ta làm gì để tạo ra của cải và làm theo họ: Họ đọc sách gì? Họ đầu tư vào đâu? Điều gì thúc đẩy họ? Làm thế nào để họ luôn giữ được động lực làm việc?…

Điều 5: Làm việc như một người giàu

Người giàu có cách đối xử với thời gian hoàn toàn khác. Họ mua thời gian trong khi những người ít tiền hơn phải bán đi thời gian của họ.

Người giàu biết rõ thời gian có giá trị hơn tiền bạc. Do đó, họ thuê những người giỏi để làm những việc mà họ không làm được hoặc không sử dụng được thời gian hiệu quả để làm việc đó.

Người giàu luôn làm việc chăm chỉ, say mê để đạt mục tiêu, và vì thế mà họ có được vị trí như hiện nay.

Điều 6: Chuyển sự tập trung từ chi tiêu sang đầu tư

Người giàu không chi tiền vô tội vạ, họ đầu tư có tính toán. Bạn mua một căn nhà và phải trả góp. Người giàu, ngược lại, mua một tòa nhà và kiếm lời từ năm này sang năm khác. Bạn mua xe mới vì nó mang lại cho bạn sự thoải mái và phong cách. Người giàu mua xe hơi để làm ra lợi nhuận.

Điều 7: Tạo ra nhiều nguồn thu nhập

Những người giàu không bao giờ phụ thuộc vào một nguồn thu nhập duy nhất. Tôi đã kiếm được thu nhập bảy con số trong vòng nhiều năm sau khi mở công ty đầu tiên và bắt đầu đầu tư vào bất động sản.

Khi việc kinh doanh bất động sản và công ty tư vấn bắt đầu ổn định, tôi tham gia vào lĩnh vực thứ ba – phát triển kinh doanh phần mềm để giúp các nhà bán lẻ gây được thiện cảm với khách hàng.

Sau hết, bạn có thể ngạc nhiên khi biết rằng những người giàu có muốn mọi người đều giàu có như họ. Một phần là để bất cứ ai cũng có tiền để mua hàng hóa và dịch vụ do họ cung cấp. Mặt khác, bản thân những người giàu đều tự nhận thấy họ không quá đặc biệt và luôn cho rằng của cải sẽ thuộc về bất cứ ai biết cố gắng và kiên trì.

Quy trình kinh doanh càng đơn giản, doanh nghiệp phát triển càng nhanh

Quy trình kinh doanh càng đơn giản, doanh nghiệp phát triển càng nhanh

Đơn giản hóa QUY TRÌNH kinh doanh

Đơn giản hóa quy trình kinh doanh là một trong những mục tiêu chiến lược của các công ty mong muốn đổi mới và thành công trong môi trường kinh doanh phức tạp ngày nay.

Khi doanh nghiệp của bạn tăng trưởng, các vấn đề cũng tăng theo.

TĂNG TRƯỞNG thường PHÁT SINH thêm VẤN ĐỀ.

Các nút cổ chai trong quy trình và hệ thống làm cho hoạt động doanh nghiệp (chăm sóc khách hàng, tương tác với nhân viên, hoạt động sản xuất, bán hàng) kém hiệu quả.

Bởi vì các công ty nhỏ thường sử dụng những hệ thống rời rạc, không kết nối nên sau một thời gian dài hoạt động, họ có xu hướng tạo ra những QUY TRÌNH kinh doanh phức tạp hơn mức bình thường.

Cho đến một lúc công ty muốn mở rộng để tăng tốc phát triển thì những QUY TRÌNH kinh doanh trở nên phức tạp, những nút cổ chai này mới dần dần lộ diện.

Hậu quả là bộ máy nhân sự cồng kềnh, hoạt động sản xuất kinh doanh yếu kém, dẫn tới thất thoát và lãng phí các nguồn lực về tiền, hàng, người.

Nếu doanh nghiệp của bạn cũng gặp tình huống này thì bạn không đơn độc.

Hoặc bạn chưa gặp các vấn đề này, thì có thể phòng ngừa ngay từ bây giờ.

Do các cấp quản lý của doanh nghiệp sợ rằng ĐƠN GIẢN HÓA QUY TRÌNH KINH DOANH sẽ dẫn tới mất quyền lợi, mất việc làm. Vì vậy, họ thường viện cớ công việc bận rộn, không có đủ thời gian để triển khai hệ thống, quy trình hoặc chính sách mới.

QUẢN LÝ ĐƠN GIẢN đôi khi lại không hề đơn giản đối với bất kỳ doanh nghiệp nào.

Cách tốt nhất để giải quyết tình trạng này là lãnh đạo doanh nghiệp cần đặt ra những mục tiêu cụ thể và trao quyền cho các cấp quản lý bên dưới thực thi.

Như vậy, chính các cấp quản lý bên dưới sẽ phải nghĩ về ĐƠN GIẢN HÓA QUY TRÌNH KINH DOANH.

Bạn có thể hình dung việc này giống như việc bạn muốn làm cho một qủa bóng lăn. Điều đơn giản nhất bạn có thể làm là tạo ra một cú CHẠM (tiếp xúc giữa chân của bạn và trái bóng).

Cách tiếp cận ĐƠN GIẢN này chính là CÁCH TIẾP CẬN TỪ DƯỚI LÊN (thay đổi con người và văn hóa từ dưới lên).

Đây là một bước đệm trong quá trình ĐƠN GIẢN HÓA QUY TRÌNH KINH DOANH.

Và là điều kiện để doanh nghiệp thực hiện những dự án lớn hơn theo CÁCH TIẾP CẬN TỪ TRÊN XUỐNG.

ĐƠN GIẢN HÓA QUY TRÌNH KINH DOANH theo cách CÁCH TIẾP CẬN TỪ DƯỚI LÊN vẫn cần có sự hỗ trợ của cấp lãnh đạo cao nhất và phải phù hợp với các mục tiêu chiến lược của doanh nghiệp.

Con người học hỏi và làm việc thông qua trải nghiệm.

Đó là cách làm việc đơn giản và hiệu quả.

Điều này đã được chứng mình trong thực tiễn kinh doanh.

Bằng cách làm việc đơn giản, con người tạo ra những thành tựu lớn cho nhân loại.

Giờ thì đến lượt bạn và doanh nghiệp của bạn.

Bạn đã biết bắt đầu đơn giản từ đâu trong tổ chức của bạn chưa?

Nếu chưa hãy liên hệ với TSS247 để nhận được tư vấn và hỗ trợ.