النظام بطيء جدا عند الحفظ ولا يمكن فتح ملفات اخرى اثناء عملية الحفظ - ما السبب؟

Viewed 0

عميل جديد يشتكي من ان النظام بطيء جدا في عملية الحفظ، ولا نستطيع فتح ملفات اخرى اثناء حفظ ملف اخر.

ما السبب المحتمل لهذه المشكلة وكيف يمكن حلها؟

Originally posted at https://answers.namasoft.com/question/44/ on 2018-06-25.

1 Answers

السبب في هذه المشكلة غالبا هو ان مستوى عزل المعاملات (Transaction Isolation Level) في قاعدة البيانات ليس مضبوطا على READ COMMITTED SNAPSHOT.

1. التحقق من الاعداد الحالي

نفذ الاستعلام التالي على قاعدة البيانات:

SELECT CASE
          WHEN transaction_isolation_level = 1
             THEN 'READ UNCOMMITTED'
          WHEN transaction_isolation_level = 2
               AND is_read_committed_snapshot_on = 1
             THEN 'READ COMMITTED SNAPSHOT'
          WHEN transaction_isolation_level = 2
               AND is_read_committed_snapshot_on = 0 THEN 'READ COMMITTED'
          WHEN transaction_isolation_level = 3
             THEN 'REPEATABLE READ'
          WHEN transaction_isolation_level = 4
             THEN 'SERIALIZABLE'
          WHEN transaction_isolation_level = 5
             THEN 'SNAPSHOT'
          ELSE NULL
       END AS TRANSACTION_ISOLATION_LEVEL
FROM   sys.dm_exec_sessions AS s
       CROSS JOIN sys.databases AS d
WHERE  session_id = @@SPID
  AND  d.database_id = DB_ID();

اذا كانت النتيجة اي شيء غير READ COMMITTED SNAPSHOT فهذا يعني انك بحاجة لضبط الاعداد.

2. تطبيق الاعداد الصحيح

ملحوظة هامة: يجب ايقاف تشغيل خدمة Tomcat اولا، ثم اعادة تشغيل خدمة SQL Server، ثم نفذ الجملة التالية (مع استبدال DBNAME باسم قاعدة البيانات الفعلي):

USE [master];
DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';'
FROM sys.dm_exec_sessions
WHERE database_id = db_id('DBNAME');

EXEC(@kill);

ALTER DATABASE DBNAME
SET READ_COMMITTED_SNAPSHOT ON;

ALTER DATABASE DBNAME
SET ALLOW_SNAPSHOT_ISOLATION ON;

ALTER DATABASE DBNAME
SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT ON;

3. ملاحظة لاصدارات SQL Server 2014 او اقدم

اذا كانت نسخة SQL Server هي 2014 او اقل، فقد تظهر رسالة خطأ بسبب الجملة الاخيرة:

ALTER DATABASE DBNAME
SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT ON;

في هذه الحالة قم بحذف هذه الجملة من السكريبت ونفذ الباقي.

مع العلم أن الطريقة الحديثة لتنصيب البرنامج تتضمن انشاء سكريبت لقاعدة البيانات به هذه الخطوة آليا


Originally posted at https://answers.namasoft.com/question/44/ on 2018-06-25.