Wenn Sie sp_xml_preparedocument ausführen, wird ein analysiertes XML-Dokument im internen Cache von SQL Server 2000 gespeichert. Der MSXML-Parser beansprucht bis zu einem Achtel des insgesamt für SQL Server verfügbaren Arbeitsspeichers. Der Teil des Caches, der für MSXML reserviert ist, bietet nicht genug Arbeitsspeicher, um das in der gespeicherten Prozedur sp_xml_preparedocument angegebene Dokument zu öffnen. Dies kann daran liegen, dass das angegebene Dokument sehr groß ist oder dass aufgrund von Dokumenten, die bereits in den Arbeitsspeicher geladen wurden, nicht mehr genug Speicher für das neue Dokument verfügbar ist.
Weitere Informationen zum Analysieren von XML-Dokumenten finden Sie in den Themen zu sp_xml_preparedocument und sp_xml_removedocument in der Onlinedokumentation.
Führen Sie sp_xml_removedocument aus, um Dokumente aus dem Arbeitsspeicher zu entfernen. Stellen Sie sicher, dass der Code stets sp_xml_removedocument aufruft, sobald die Verarbeitung eines Dokuments abgeschlossen ist. Der Code sollte auch die Möglichkeit berücksichtigen, dass eine Verbindung oder Transaktion zwischen den Aufrufen von sp_xml_preparedocument und sp_xml_removedocument unterbrochen wird. Um dies zu erreichen, kann es notwendig sein, Handles für geöffnete Dokumente in einer Tabelle zu speichern, wo Sie auf die Handles verweisen können, falls ein Batch unterbrochen wird.
Target | Microsoft.SQLServer.2008.DBEngine | ||
Category | EventCollection | ||
Enabled | True | ||
Event_ID | 6624 | ||
Event Source | $Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$ | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Remotable | True | ||
Alert Message |
| ||
Event Log | Application | ||
Comment | Mom2008ID='{136A2E5E-A460-4FAE-8587-D72C945E89EB}';MOM2008GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74} |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
_F6DA1507_12AF_11D3_AB21_00A0C98620CE_ | DataSource | Microsoft.Windows.EventProvider | Microsoft.SQLServer.SQLDefaultAccount |
GenerateAlert | WriteAction | System.Health.GenerateAlert | Default |
<Rule ID="Microsoft.SQLServer.2008.XML___XML_document_could_not_be_created_because_server_memory_is_low._Use_sp_xml_removedocument_to_release_XML_documents_1_5_Rule" Target="SQL2008Core!Microsoft.SQLServer.2008.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2008ID='{136A2E5E-A460-4FAE-8587-D72C945E89EB}';MOM2008GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Windows!Microsoft.Windows.EventProvider" RunAs="SQL!Microsoft.SQLServer.SQLDefaultAccount">
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<LogName>Application</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>6624</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.2008.XML___XML_document_could_not_be_created_because_server_memory_is_low._Use_sp_xml_removedocument_to_release_XML_documents_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>