Μπορεί να μην υπάρχει αρκετή εικονική μνήμη όταν έχετε μεγάλο αριθμό βάσεων δεδομένων στον SQL Server

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 316749 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Συμπτώματα

Μπορεί να μην υπάρχει αρκετός χώρος εικονικών διευθύνσεων που είναι διαθέσιμες στη διαδικασία του Microsoft SQL Server αν όλες οι ακόλουθες συνθήκες είναι αληθείς όταν εκτελείτε SQL Server με τις προεπιλεγμένες τιμές παραμέτρων:
  • Ο διακομιστής έχει 2 GB ή περισσότερα μνήμης RAM.
  • Υπάρχουν πολλές βάσεις δεδομένων στο σύστημα (για παράδειγμα, περισσότερα από 500).
  • Ενημερώνονται οι περισσότερες από τις βάσεις δεδομένων (για παράδειγμα, οι βάσεις δεδομένων δεν διαθέτουν μια κατάσταση "μόνο για ανάγνωση").
  • Υπάρχουν αρκετές συνδέσεις ταυτόχρονα ενεργό χρήστη για να χρησιμοποιήσετε τα περισσότερα από τα 255 νήματα εργασίας του SQL Server.
SQL Server ενδέχεται να δημιουργήσει τα ακόλουθα μηνύματα λάθους, όταν χρησιμοποιείται ο χώρος εικονικής διεύθυνσης ολόκληρη 2 GB (ή αφού ο χώρος εικονικής διεύθυνσης ολόκληρη 3 GB χρησιμοποιείται στον SQL Server Enterprise Edition με το/ 3 GBΜεταβείτε στο αρχείο Boot.ini).

Μήνυμα 1

Σφάλμα: 17802, σοβαρότητα: 18, κατάσταση: 3
Δεν ήταν δυνατή η δημιουργία νήματος συμβάντων διακομιστή.

Μήνυμα 2

SQL Server δεν ήταν δυνατό να παραγάγει process_loginread νήματος.

Το μήνυμα 3

ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Εκκαθάριση cache διαδικασία για να ελευθερώσετε συνεχούς μνήμης.

Διανομή buffer: Κλαπεί = 3454 δωρεάν = διαδικασίες 2540 = 138
Inram = 0 = προβληματικός 1108 Kept = 35
Μου / O = 0, Latched = 0, άλλες = 214821
Μετρήσεις buffer: Ολοκλήρωσης = 222096 Target = 222096 κατακερματίζεται = 215964
InternalReservation = 547 ExternalReservation = 0 λεπτά δωρεάν = 512
Η διαδικασία προσωρινής αποθήκευσης: TotalProcs = 8 TotalPages = 138 InUsePages = 138
Δυναμική διαχείριση μνήμης: κλαπεί = 3556
Λειτουργικό Σύστημα = 497 γενικά = 1706
Ερώτημα σχέδιο = 755 βελτιστοποίηση = 0
Βοηθητικά προγράμματα = σύνδεση 9 = 1583
Πόρος αντικείμενα καθολική μνήμη: = Κλειδώματα 1119 = 163 XDES = 1 SQLCache = 90 αναπαραγωγής = 5 LockBytes = 2 ServerGlobal = 20
Διαχείριση μνήμης ερώτημα: παραχωρεί = 0 σε αναμονή = 0 μέγιστο = 164370 διαθέσιμα = 164370

Αιτία

Για κάθε ενημερωμένη βάση δεδομένων του SQL Server εκχωρεί τουλάχιστον ένα μπλοκ 64-KB για χρήση στη μορφοποίηση εγγραφές καταγραφής πριν αυτές εγγράφονται στο δίσκο. Αυτή η εκχώρηση συμβαίνει όταν της πρώτης εγγραφής στο αρχείο καταγραφής δημιουργείται για τη βάση δεδομένων, όπως κατά την πρόταση INSERT, UPDATE ή DELETE. Ανάλογα με τη δραστηριότητα και το μέγεθος των εγγραφών που δημιουργείται αρχείο καταγραφής, οι επόμενες τροποποιήσεις μπορεί να ενεργοποιούν την εκχώρηση των εκχωρήσεων πρόσθετες 64 KB. SQL Server 7.0 θα εκχωρήσει όχι περισσότερα από τρία μπλοκ 54-KB. Στον SQL Server 2000, το ανώτερο αριθμό των αναθέσεων για κάθε βάση δεδομένων είναι μια συνάρτηση του αριθμού των επεξεργαστών τον SQL Server έχει ρυθμιστεί για χρήση.

Εναλλακτικός τρόπος αντιμετώπισης

Χρήση του-gπαράμετρο εκκίνησης για να αφήσετε πρόσθετων, Αδέσμευτη εικονικής μνήμης που είναι διαθέσιμη για αυτές τις εκχωρήσεις της βάσης δεδομένων. Για να-gparameter is documented in the Readme.txt of the SQL Server 7.0 service pack, and in SQL Server 2000 Books Online. The "More Information" section in this article includes the settings that Microsoft recommends you use to determine the appropriate value for this setting.

Περισσότερες πληροφορίες

On a computer with 2 GB or more of RAM, SQL Server reserves all but 256 MB (SQL Server 7.0) or 384 MB (SQL Server 2000) of virtual address space during the startup process for use by the buffer pool. Additionally, to storing the data and procedure cache, SQL Server uses the buffer pool memory to service most other memory requests from SQL Server processes that are less than 8 KB. The remaining unreserved memory is intended for use with other allocations that cannot be serviced from the buffer pool. These allocations include, but are not limited to:
  • Stacks and the associated thread environment block for any threads that SQL Server creates. After SQL Server creates all 255 worker threads, this is approximately 140 MB.
  • Allocations that are made by other DLLs or processes that are running in the SQL Server address space (which varies from system to system), such as:
    • OLE DB providers from any linked servers.
    • COM objects that are loaded by use of thesp_OAsystem stored procedures or extended stored procedures.
  • Any images (.exe or .dll) that are loaded in the address space, which commonly use 20 to 25 MB, but possibly more if you are using linked servers,sp_OA, or extended stored procedures.
  • The process heap and any other heaps that SQL Server might create. During the startup process, this is typically 10 MB, but may be more if you are using linked servers,sp_OA, or extended stored procedures.
  • Allocations from SQL Server processes that are greater than 8 KB, such as those required for large query plans, send and receive buffers if thenetwork packet sizeconfiguration option is close to 8 KB, and so on. To see this number, look for theOS Reservedvalue that is reported in DBCC MEMORYSTATUS and that is reported as number of 8-KB pages. Typical values for this are 5 MB.
  • An array to track status information for each buffer that is in the buffer pool. This is typically about 20 MB, unless SQL Server is running with Address Windowing Extensions (AWE) enabled, in which case it can be significantly higher.
On systems that have a large number of databases, the 64-KB allocations that are required for log formatting might occupy all of the remaining virtual memory. At that point, subsequent allocations may fail, resulting in one or more of the errors that are listed in the "Symptoms" section in this article.

Χρησιμοποιώντας το-gstartup parameter, you can instruct SQL Server to leave additional virtual memory available so that the combination of these log-related allocations and other normal allocations does not run out of virtual address space.

The following table lists some suggested starting points for the-gvalue depending on the number of databases and the server version:
Σύμπτυξη αυτού του πίνακαΑνάπτυξη αυτού του πίνακα
Βάσεις δεδομένωνSQL Server 7.0Του SQL Server 2000
250-g134Δ/Υ
500-g185Δ/Υ
750-g237Δ/Υ
1000-g288-g288
1250-g340-g340
1500-g392-g392
This table was calculated by using the typical values that are listed and it is also based on the assumption that no linked server activity,sp_OAor extended stored procedures are in use. It is also based on the assumption that you are not using AWE, and that SQL Profiler is not in use. Any of these conditions may require you to increase the value of-g.

Microsoft recommends that you take serious consideration before you run a server with more databases than this because the overhead that is required for having this number of databases on the system is taking a lot of virtual memory away from the buffer pool, which may result in poor performance for the system as a whole.

Additionally, creating lots of databases has the most significant effect on virtual memory. There are also per-database memory allocations that may cause a buffer pool out-of-memory condition. For example, you may receive the following error message:
Error: 701, Severity: 17, State: 123.
There is insufficient system memory to run this query.
This kind of out-of-memory condition may be more common in SQL Server 2005 because SQL Server 2005 tracks more per-database metadata than earlier versions of SQL Server.

When you track the index usage by using thesys.dm_db_index_usage_statsstored procedure, the operation may require a significant amount of memory. The operation requires a significant amount of memory if each database has lots of indexes.

Ιδιότητες

Αναγν. άρθρου: 316749 - Τελευταία αναθεώρηση: Τρίτη, 21 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard Edition
Λέξεις-κλειδιά: 
kberrmsg kbtshoot kbnofix kbprb kbmt KB316749 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:316749

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com