Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

मैं SQL सर्वर मेमोरी से SqlD निर्भरता को कैसे साफ़ करूं?

Microsoft SqlD निर्भरता वर्ग का एक विशिष्ट व्यवहार है। भले ही आप SqlDependency.Stop() विधि को कॉल करें, SqlCommand और SqlConnection को छोड़ दें - यह अभी भी डेटाबेस में वार्तालाप समूह (sys.conversation_groups) और वार्तालाप समापन बिंदु (sys.conversation_endpoints) रखता है। ऐसा लगता है कि SQL सर्वर प्रत्येक वार्तालाप समापन बिंदु को लोड करता है और सभी अनुमत स्मृति का उपयोग करता है। यहां परीक्षण जो इसे साबित करते हैं। इसलिए, सभी अप्रयुक्त वार्तालाप समापन बिंदुओं को साफ़ करने के लिए और सभी कब्जे वाली स्मृति को मुक्त करने के लिए आपको अपने डेटाबेस के लिए यह SQL कोड प्रारंभ करना होगा:

DECLARE @ConvHandle uniqueidentifier
DECLARE Conv CURSOR FOR
SELECT CEP.conversation_handle FROM sys.conversation_endpoints CEP
WHERE CEP.state = 'DI' or CEP.state = 'CD'
OPEN Conv;
FETCH NEXT FROM Conv INTO @ConvHandle;
WHILE (@@FETCH_STATUS = 0) BEGIN
    END CONVERSATION @ConvHandle WITH CLEANUP;
    FETCH NEXT FROM Conv INTO @ConvHandle;
END
CLOSE Conv;
DEALLOCATE Conv;

साथ ही, SqlD निर्भरता आपको तालिका के सभी परिवर्तनों को प्राप्त करने का अवसर नहीं देती है। इसलिए, आपको SqlD निर्भरता पुनर्सदस्यता के दौरान परिवर्तनों के बारे में सूचना प्राप्त नहीं होती है।

इन सभी समस्याओं से बचने के लिए मैंने एसक्लडपेंडेंसी क्लास का एक और ओपन सोर्स अहसास इस्तेमाल किया - एसक्लडपेंडेंसीएक्स . यह तालिका के परिवर्तनों के बारे में घटनाओं को प्राप्त करने के लिए डेटाबेस ट्रिगर और मूल सेवा ब्रोकर अधिसूचना का उपयोग करता है। यह एक उपयोग उदाहरण है:

int changesReceived = 0;
using (SqlDependencyEx sqlDependency = new SqlDependencyEx(
          TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME)) 
{
    sqlDependency.TableChanged += (o, e) => changesReceived++;
    sqlDependency.Start();

    // Make table changes.
    MakeTableInsertDeleteChanges(changesCount);

    // Wait a little bit to receive all changes.
    Thread.Sleep(1000);
}

Assert.AreEqual(changesCount, changesReceived);

आशा है कि यह मदद करता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL में गुणन कुल ऑपरेटर

  2. IN खंड द्वारा SQL सर्वर परिणामों का आदेश देना

  3. एसक्यूएल सर्वर क्वेरी में यूनियन सभी बनाम या स्थिति

  4. SQL Server 2008 का उपयोग करके IDENTITY_INSERT को चालू और बंद कैसे करें?

  5. SQL सर्वर में "केवल एक अभिव्यक्ति को चयन सूची में निर्दिष्ट किया जा सकता है ..." को कैसे ठीक करें?