Το αρχείο INF: Κατανόηση και επίλυση προβλημάτων του αποκλεισμού του SQL Server

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

Σε αυτήν τη σελίδα

Περίληψη

Σε αυτό το άρθρο, ο όρος "σύνδεση" αναφέρεται σε μία περίοδο συνδεθεί λειτουργίας της βάσης δεδομένων. Κάθε σύνδεση εμφανίζεται ως ένα Αναγνωριστικό περιόδου λειτουργίας (SPID). Κάθε μία από αυτές τις SPID αναφέρεται συχνά ως διεργασία, παρόλο που δεν είναι μια ξεχωριστή διαδικασία περιβάλλον με την συνηθισμένη έννοια. Αντίθετα, κάθε SPID αποτελείται από το πόρους διακομιστή και δομές δεδομένων που είναι απαραίτητα για τις αιτήσεις μιας σύνδεσης μόνο από έναν συγκεκριμένο υπολογιστή-πελάτη της υπηρεσίας. Μια εφαρμογή προγράμματος-πελάτη μόνο μπορεί να έχει μία ή περισσότερες συνδέσεις. Από την άποψη του SQL Server, δεν υπάρχει καμία διαφορά μεταξύ των πολλαπλών συνδέσεων από μια εφαρμογή προγράμματος-πελάτη μόνο σε έναν υπολογιστή-πελάτη μόνο και πολλαπλές συνδέσεις από πολλές εφαρμογές προγράμματος-πελάτη ή πολλούς υπολογιστές-πελάτες. Μια σύνδεση μπορεί να αποκλείσει άλλη σύνδεση, ανεξάρτητα από το αν αυτοί emanate από την ίδια εφαρμογή ή εφαρμογές ξεχωριστά σε δύο διαφορετικούς υπολογιστές-πελάτες.

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

Ο αποκλεισμός είναι ένα χαρακτηριστικό αναπόφευκτη από οποιοδήποτε σύστημα διαχείρισης σχεσιακής βάσης δεδομένων (RDBMS) με σύμπτωση με βάση το κλείδωμα. Στον SQL Server, ο αποκλεισμός παρουσιάζεται όταν ένα αναγνωριστικό SPID διατηρεί ένα κλείδωμα για έναν συγκεκριμένο πόρο και ένα δεύτερο SPID προσπαθεί να αποκτήσει μια διένεξη Τύπος κλειδώματος στον ίδιο πόρο. Συνήθως, το χρονικό διάστημα για την οποία το πρώτο SPID κλειδώνει ο πόρος είναι πολύ μικρό. Κατά την κυκλοφορία του κλειδώματος, η δεύτερη σύνδεση είναι δωρεάν για να αποκτήσετε το δικό του κλειδώματος στον πόρο και να συνεχίζουν την επεξεργασία. Αυτή είναι η κανονική συμπεριφορά και μπορεί να συμβεί πολλές φορές σε όλη τη διάρκεια μιας ημέρας με δεν υπάρχει εμφανές επίδραση στις επιδόσεις του συστήματος.

Το περιβάλλον για τη διάρκεια και συναλλαγών ενός ερωτήματος καθορίζουν πόσο καιρό διατηρούνται τα κλειδώματα της και, συνεπώς, τους επίδραση σε άλλα ερωτήματα. Εάν το ερώτημα δεν εκτελείται μέσα σε μια συναλλαγή (και δεν υπάρχουν συμβουλές κλειδώματος που χρησιμοποιούνται), τα κλειδώματα για προτάσεις SELECT θα μόνο να κρατηθεί σε έναν πόρο κατά τη στιγμή που στην πραγματικότητα γίνεται ανάγνωση και όχι για τη διάρκεια του ερωτήματος. Για προτάσεις INSERT, UPDATE και DELETE, τα κλειδώματα διατηρούνται στη διάρκεια του ερωτήματος, τόσο για συνέπεια δεδομένων και για να επιτρέψετε στο ερώτημα για να επανέλθει αν είναι απαραίτητο.

Για τα ερωτήματα εκτελούνται μέσα σε μια συναλλαγή, στη διάρκεια του οποίου διατηρούνται τα κλειδώματα προσδιορίζονται από τον τύπο του ερωτήματος, το επίπεδο απομόνωσης συναλλαγής, και να κλειδώσετε ή όχι υποδείξεις που χρησιμοποιούνται στο ερώτημα. Για την περιγραφή του κλειδώματος, συμβουλές κλειδώματος και επίπεδα απομόνωσης συναλλαγής, ανατρέξτε στα ακόλουθα θέματα στα ηλεκτρονικά εγχειρίδια του SQL Server:
  • Κλείδωμα στο μηχανισμό βάσης δεδομένων
  • Κλείδωμα προσαρμογής και γραμμής τήρησης ιστορικού εκδόσεων
  • Κατάσταση λειτουργίας κλειδώματος
  • Κλείδωμα συμβατότητας
  • Γραμμή με βάση την τήρηση ιστορικού εκδόσεων επίπεδο απομόνωσης στο μηχανισμό βάσης δεδομένων
  • Έλεγχος συναλλαγών (διαχείρισης βάσεων δεδομένων)
Κατά το κλείδωμα και αποκλείει την αύξηση στο σημείο όπου υπάρχει μια επιβλαβή επίδραση στις επιδόσεις του συστήματος, είναι συνήθως οφείλεται σε έναν από τους παρακάτω λόγους:
  • Ένα αναγνωριστικό SPID διατηρεί τα κλειδώματα σε ένα σύνολο πόρων για μεγάλο χρονικό διάστημα, πριν να απελευθερώσετε τους. Αυτός ο τύπος του αποκλεισμού της επιλύει το ίδιο με τον καιρό, αλλά μπορεί να προκαλέσει υποβάθμιση των επιδόσεων.
  • Ένα αναγνωριστικό SPID διατηρεί τα κλειδώματα σε ένα σύνολο πόρων και ποτέ εκδόσεις τους. Ο αποκλεισμός αυτός ο τύπος δεν επιλυθεί με τον εαυτό και αποτρέπει την πρόσβαση στους πόρους που έχουν επηρεαστεί απεριόριστα.
Στο πρώτο σενάριο παραπάνω, το ζήτημα αποκλεισμού επιλύει ίδια με τον καιρό καθώς το SPID αποδεσμεύει τα κλειδώματα. Ωστόσο, η κατάσταση μπορεί να είναι πολύ παύση ως διαφορετική αιτία SPID αποκλεισμού σε διαφορετικούς πόρους με τον καιρό, δημιουργώντας ένα κινούμενο στόχο. Για το λόγο αυτό, μπορεί να είναι δύσκολη η αντιμετώπιση προβλημάτων με χρήση του SQL Server Enterprise Manager ή μεμονωμένα ερωτήματα SQL αυτές τις καταστάσεις. The second situation results in a consistent state that can be easier to diagnose.

Gathering Blocking Information

To counteract the difficulty of troubleshooting blocking problems, a database administrator can use SQL scripts that constantly monitor the state of locking and blocking on SQL Server. These scripts can provide snapshots of specific instances over time, leading to an overall picture of the problem. For a description of how to monitor blocking with SQL scripts, see the following articles in the Microsoft Knowledge Base:
271509How to monitor blocking in SQL Server 2005 and in SQL Server 2000
The scripts in this article will perform the tasks below. Where possible, the method for obtaining this information from SQL Server Management Studio is given.
  1. Identify the SPID (Session ID) at the head of the blocking chain and the SQL Statement.
    In addition to using the scripts in the previously mentioned Knowledge Base article, you can identify the head of the blocking chain by using features that are provided through SQL Server Management Studio. Για να το κάνετε αυτό, χρησιμοποιήστε μία από τις ακόλουθες μεθόδους:
    • Right-click the server object, expandΑναφορέςexpandStandard Reports, και στη συνέχεια κάντε κλικ στο κουμπίActivity – All Blocking Transactions. This report shows the transactions at the head of blocking chain. If you expand the transaction, the report will show the transactions that are blocked by the head transaction. This report will also show the "Blocking SQL Statement" and the "Blocked SQL Statement."
    • Use DBCC INPUTBUFFER(<spid>) to find the last statement that was submitted by a SPID.</spid>
  2. Find the transaction nesting level and process status of the blocking SPID.
    The transaction nesting level of a SPID is available in the @@TRANCOUNT global variable. However, it can be determined from outside the SPID by querying thesysprocessestable as follows:

    SELECT open_tran FROM master.sys.sysprocesses WHERE SPID=<blocking SPID number>
    go
    						
    The value returned is the @@TRANCOUNT value for the SPID. This shows the transaction nesting level for the blocking SPID, which in turn can explain why it is holding locks. For example, if the value is greater than zero, the SPID is in the midst of a transaction (in which case it is expected that it retains certain locks it has acquired, depending on the transaction isolation level).

    You can also check to see if any long-term open transaction exists in the database by using DBCC OPENTRANdatabase_name.

Gathering SQL Server Profiler Trace Information

In addition to the above information, it is often necessary to capture a Profiler trace of the activities on the server to thoroughly investigate a blocking problem on SQL Server. If a SPID executes multiple statements within a transaction, only the last statementthat was submitted will show in the report, input buffer, or activity monitor output. However, one of the earlier commands may be the reason locks are still being held. A Profiler trace will enable you to see all of the commands executed by a SPID within the current transaction. The following steps help you to set up SQL Server Profiler to capture a trace.
  1. Open SQL Server Profiler.
  2. Στο διακομιστήFILEμενού, σημείοΝέα, και στη συνέχεια κάντε κλικ στο κουμπίTrace.
  3. Στο διακομιστήΓενικάtab, specify a trace name and a file name to capture the data to.

    ΣημαντικόThe trace file should be written to a fast local or shared disk. Avoid tracing to a slow disk or network drive. Also make sure Server processes trace data is selected.
  4. Στο διακομιστήEvents Selectionκαρτέλα, κάντε κλικ για να επιλέξετε τοShow all eventsκαι τοShow all columnscheck boxes.
  5. Στο διακομιστήEvents Selectiontab, add the Event types that are listed in Table 1 to your trace.

    Additionally, you may include the additional Event types that are listed in Table 2 for further information. If you are running in a high-volume production environment, you may decide to use only the events in Table 1, as they are typically sufficient to troubleshoot most blocking problems. Including the additional events in Table 2 may make it easier to quickly determine the source of a problem (or these events may be necessary to identify the culprit statement in a multi-statement procedure). However, including events in Table 2 will also add to the load on the system and increase the trace output size.
Table 1: Event types
Σύμπτυξη αυτού του πίνακαΑνάπτυξη αυτού του πίνακα
HeadingEvent
Errors and WarningsException
Errors and WarningsAttention
Security AuditAudit Login
Security AuditAudit Logout
SessionsExisting Connection
Stored ProceduresRPC:Starting
TSQLSQL:BatchStarting

Table 2: Additional Event types
Σύμπτυξη αυτού του πίνακαΑνάπτυξη αυτού του πίνακα
HeadingEvent
TransactionsDTCTransaction
TransactionsSQLTransaction
Stored ProceduresRPC:Completed
TSQLSQL:BatchCompleted
Stored ProceduresSP:StmtStarting
Stored ProceduresSP:StmtCompleted

For more information about using the SQL Server Profiler, please see SQL Server Books Online.

Αναγνώριση και επίλυση κοινά αποκλεισμού σενάρια

Εξετάζοντας τις παραπάνω πληροφορίες, μπορείτε να προσδιορίσετε την αιτία του τα περισσότερα προβλήματα αποκλεισμού. Το υπόλοιπο αυτού του άρθρου είναι μια συζήτηση σχετικά με τον τρόπο για να χρησιμοποιήσετε αυτές τις πληροφορίες για να αναγνωρίσετε και να επιλύσετε ορισμένα κοινά σενάρια αποκλεισμού. Αυτήν τη συζήτηση προϋποθέτει έχετε χρησιμοποιήσει τις δέσμες αποκλεισμού ενεργειών στο άρθρο 271509 (αναφέρεται παραπάνω) για να καταγράψετε πληροφορίες σχετικά με το SPID αποκλεισμού και έχετε κάνει ένα ίχνος Profiler με τα συμβάντα που περιγράφονται παραπάνω.

Προβολή του αποκλεισμού δέσμης ενεργειών εξαγωγής

Εξετάστε τοsys.sysprocessesΓια να προσδιορίσετε τις κεφαλές του αποκλεισμού της αλυσίδες εξόδου
Εάν δεν έχετε καθορίσει γρήγορη κατάσταση λειτουργίας για τα αποκλεισμού δέσμης ενεργειών, θα υπάρχει μια ενότητα με τίτλο "SPID στην αρχή του αποκλεισμού αλυσίδες" που αναγράφει το SPID που εμποδίζουν άλλες SPID στη δέσμη ενεργειών.
SPIDs at the head of blocking chains
Εάν καθοριστεί η Γρήγορη επιλογή, μπορείτε να καθορίσετε ακόμα οι κεφαλές αποκλεισμού κοιτάζοντας τοsys.sysprocessesΈξοδος και ακολουθώντας την ιεραρχία των το SPID που αναφέρεται στη στήλη αποκλεισμένο.
Εξετάστε τοsys.sysprocessesΓια πληροφορίες σχετικά με το SPID στην αρχή της αλυσίδας εμποδίζουν την έξοδο.
Είναι σημαντικό να αξιολογήσετε τα εξήςsys.sysprocessesΠεδία:

Κατάσταση

Αυτή η στήλη εμφανίζει την κατάσταση μιας συγκεκριμένης SPID. Συνήθως, ένασε κατάσταση αναστολής λειτουργίαςκατάσταση δηλώνει ότι το SPID έχει ολοκληρώσει την εκτέλεση και είναι σε αναμονή της εφαρμογής για να υποβάλετε ένα άλλο ερώτημα ή δέσμης. Αrunnable,εκτέλεση, ήsos_scheduler_yieldη κατάσταση δηλώνει ότι το SPID αυτήν τη στιγμή επεξεργάζεται ένα ερώτημα. Ο παρακάτω πίνακας δίνει σύντομες επεξηγήσεις των διαφόρων τιμών κατάστασης.
Σύμπτυξη αυτού του πίνακαΑνάπτυξη αυτού του πίνακα
ΚατάστασηΣημασία
ΠαρασκήνιοΤο SPID εκτελεί μια εργασία παρασκηνίου, όπως ο εντοπισμός αδιεξόδου.
Σε κατάσταση αναστολής λειτουργίαςΤο SPID δεν εκτελείται αυτήν τη στιγμή. Αυτό υποδεικνύει ότι το SPID σε αναμονή μια εντολή από την εφαρμογή.
ΕκτέλεσηΤο SPID εκτελείται αυτήν τη στιγμή σε ένα χρονοδιάγραμμα.
RunnableΤο SPID έχει runnable ουρά μια λειτουργία και αναμονή για χρόνο προγραμματισμού.
Sos_scheduler_yieldΤο SPID λειτουργούσε, αλλά αυτό έχει παρουσίασαν οικειοθελώς τη φέτα χρόνου από το χρονοδιάγραμμα για να επιτρέψετε σε άλλη SPID για απόκτηση χρόνο προγραμματισμού.
Αναστολή (Suspended)Το SPID αναμένει ένα συμβάν, όπως ένα κλείδωμα ή ενός κλειδώματος.
ΕπαναφοράΤο SPID έχει δυνατότητα επαναφοράς μιας συναλλαγής.
DefwakeupΔηλώνει ότι το SPID είναι σε αναμονή για έναν πόρο που βρίσκεται σε διαδικασία να αποδεσμευτεί. Το πεδίο waitresource πρέπει να υποδείξετε στον εν λόγω πόρο.

Open_tran

Αυτό το πεδίο σας ενημερώνει για το επίπεδο ένθεσης συναλλαγή το SPID. Εάν αυτή η τιμή είναι μεγαλύτερη από 0, το SPID βρίσκεται μέσα σε ανοιχτή συναλλαγή και κρατάτε τα κλειδώματα που αποκτήθηκε από οποιαδήποτε πρόταση μέσα στη συναλλαγή.

Lastwaittype waittype και waittime

Για ναlastwaittypeτο πεδίο είναι μια αναπαράσταση συμβολοσειράς τηςwaittypeπεδίο, το οποίο είναι δεσμευμένο εσωτερική δυαδική στήλη. Αν υπάρχει ήδη ο φάκελοςwaittypeείναι 0x0000, το SPID δεν αναμένει αυτή τη στιγμή τίποτα και τοlastwaittypeη τιμή υποδεικνύει την τελευταίαwaittypeότι είχε το SPID. Αν υπάρχει ήδη ο φάκελοςwaittypeΔεν είναι μηδέν, ηlastwaittypeη τιμή υποδεικνύει την τρέχουσαwaittypeαπό το SPID.

Για μια σύντομη περιγραφή τους διαφορετικούςlastwaittypeANDwaittypeτιμές, ανατρέξτε στο ακόλουθο άρθρο της Microsoft Knowledge βάσης:
822101Περιγραφή των waittype και lastwaittype στηλών στον πίνακα master.dbo.sysprocesses σε SQL Server 2000 και του SQL Server 2005
Για περισσότερες πληροφορίες σχετικά μεsys.dm_os_wait_stats, δείτε ηλεκτρονικά βιβλία SQL Server Books Online.

Για ναWaitTimeη τιμή μπορεί να χρησιμοποιηθεί για να προσδιορίσετε αν το SPID πραγματοποιεί πρόοδο. Όταν ένα ερώτημα σε σχέση με τοsys.sysprocessesΠίνακας επιστρέφει μια τιμή από τοWaitTimeστήλη που είναι μικρότερο από τοWaitTimeτιμή από ένα προηγούμενο ερώτημαsys.sysprocesses, αυτό δηλώνει ότι το κλείδωμα της προηγούμενης ήταν αποκτήθηκε και θα κυκλοφορήσει και είναι τώρα σε αναμονή σε ένα νέο κλείδωμα (με την προϋπόθεση waittime μη μηδενική τιμή). Αυτό μπορεί να επαληθευτεί, συγκρίνοντας τηνwaitresourceBETWEENsys.sysprocessesΈξοδος.

Waitresource

Αυτό το πεδίο δηλώνει τον πόρο που είναι σε αναμονή μια SPID. Ο παρακάτω πίνακας παραθέτει κοινέςwaitresourceμορφές και η σημασία τους:
Σύμπτυξη αυτού του πίνακαΑνάπτυξη αυτού του πίνακα
πόροςΜορφή (Format)Παράδειγμα
TABLEDatabaseID:ObjectID:IndexIDΚΑΡΤΈΛΑ: 5:261575970:1
Στην περίπτωση αυτή, η βάση δεδομένων ID 5 είναι τοpubsδείγμα βάσης δεδομένων και το αντικείμενο ID 261575970 είναι τοΟι τίτλοιο πίνακας και το 1 είναι το συγκεντρωτικό ευρετήριο.
του διαφημιζόμενου πελάτη ΒDatabaseID:FileID:PageIDΣΕΛΊΔΑ: 5:1:104
Σε αυτήν την περίπτωση, είναι η βάση δεδομένων Ταυτότητας 5pubs, file ID 1 is the primary data file, and page 104 is a page belonging to thetitlestable.

To identify the object id that the page belongs to, use the DBCC PAGE (dbid, fileid, pageid, output_option) command, and look at the m_objId. Για παράδειγμα:
DBCC TRACEON ( 3604 )
DBCC PAGE ( 5 , 1 , 104 , 3 )
ΚλειδίDatabaseID:Hobt_id (Hash value for index key)KEY: 5:72057594044284928 (3300a4f361aa)

In this case, database ID 5 is Pubs, Hobt_ID 72057594044284928 corresponds to non clustered index_id 2 for object id 261575970 (titlestable). Use the sys.partitions catalog view to associate the hobt_id to a particular index id and object id. There is no way to unhash the index key hash to a specific index key value.
RowDatabaseID:FileID:PageID:Slot(row)RID: 5:1:104:3

In this case, database ID 5 is pubs , file ID 1 is the primary data file, page 104 is a page belonging to the titles table, and slot 3 indicates the row's position on the page.
CompileDatabaseID:ObjectID [[COMPILE]]TAB: 5:834102012 [[COMPILE]] This is not a table lock, but rather a compile lock on a stored procedure. Database ID 5 is pubs, object ID 834102012 is stored procedure usp_myprocedure. See Knowledge Base Article 263889 for more information on blocking caused by compile locks.
Other columns

The remainingsys.sysprocessescolumns can provide insight into the root of a problem as well. Their usefulness varies depending on the circumstances of the problem. For example, you can determine if the problem happens only from certain clients (hostname), on certain network libraries (net_library), when the last batch submitted by a SPID was (last_batch), and so on.
Examine the DBCC INPUTBUFFER output.
For any SPID at the head of a blocking chain or with a non-zero waittype, the blocking script will execute DBCC INPUTBUFFER to determine the current query for that SPID.

In many cases, this is the query that is causing the locks that are blocking other users to be held. However, if the SPID is within a transaction, the locks may have been acquired by a previously executed query, not the current one. Therefore, you should also view the Profiler output for the SPID, not just the inputbuffer.

ΣΗΜΕΙΩΣΗBecause the blocking script consists of multiple steps, it is possible that a SPID may appear in the first section as the head of a blocking chain, but by the time the DBCC INPUTBUFFER query is executed, it is no longer blocking and the INPUTBUFFER is not captured. This indicates that the blocking is resolving itself for that SPID and it may or may not be a problem. At this point, you can either use the fast version of the blocking script to try to ensure you capture the inputbuffer before it clears (although there is still no guarantee), or view the Profiler data from that time frame to determine what queries the SPID was executing.

Viewing the Profiler Data

Viewing Profiler data efficiently is extremely valuable in resolving blocking issues. The most important thing to realize is that you do not have to look at everything you captured; be selective. Profiler provides capabilities to help you effectively view the captured data. ΣτοΙδιότητες (Properties)dialog box (on theFILEμενού, κάντε κλικ στο κουμπίΙδιότητες (Properties)), Profiler allows you to limit the data displayed by removing data columns or events, grouping (sorting) by data columns and applying filters. You can search the whole trace or only a specific column for specific values (on theΕπεξεργαστείτε τη διαδρομήμενού, κάντε κλικ στο κουμπίΕύρεση). Μπορείτε επίσης να αποθηκεύσετε τα δεδομένα Profiler σε πίνακα του SQL Server (από τοFILEμενού, σημείοΑποθήκευση ωςκαι, στη συνέχεια, κάντε κλικ στο κουμπίTABLE) και την εκτέλεση ερωτημάτων SQL.

Προσέξτε ότιπραγματοποιήσετε φιλτράρισμα μόνο σε ένα αρχείο είχε αποθηκευτεί προηγουμένως ανίχνευσης. Εάν εκτελείτε αυτά τα βήματα σε ένα ενεργό ανίχνευσης, κινδυνεύετε να χάσετε δεδομένα που καταγράφηκε από τη στιγμή που ξεκίνησε η παρακολούθηση. Αποθήκευση ενός ενεργού παρακολούθησης σε ένα αρχείο ή πίνακα πρώτα (από τοFILEμενού, κάντε κλικ στο κουμπίΑποθήκευση ως) και στη συνέχεια ανοίξετε πάλι (από τοFILEμενού, κάντε κλικ στο κουμπίOpen) πριν να συνεχίσετε. Όταν εργάζεστε με ένα αρχείο αποθηκευμένο ανίχνευσης, το φιλτράρισμα δεν καταργηθεί οριστικά τα δεδομένα που φιλτράρει, απλώς δεν εμφανίζει όλα τα δεδομένα. Μπορείτε να προσθέσετε και να καταργήσετε τα συμβάντα και στήλες δεδομένων, όπως είναι απαραίτητο για να εστιάσετε τις αναζητήσεις.

Τι μπορείτε να αναζητήσετε:
  • Τι εντολές έχει το SPID στην αρχή μια αλυσίδα αποκλεισμού εκτελείται εντός της τρέχουσας συναλλαγής;
    Το φιλτράρισμα των δεδομένων ανίχνευσης για ένα συγκεκριμένο αναγνωριστικό SPID που βρίσκεται στην αρχή της μιας αλυσίδας αποκλεισμού (από τοFILEμενού, κάντε κλικ στο κουμπίΙδιότητες (Properties)έπειτα από τοΦίλτρακαρτέλα καθορίζει την τιμή SPID). Στη συνέχεια, μπορείτε να εξετάσετε τις εντολές που να έχει εκτελεστεί, πριν να την ώρα που ο αποκλεισμός άλλων SPID. Εάν συμπεριλάβετε τα συμβάντα συναλλαγών, τους να αναγνωρίσετε εύκολα όταν ξεκίνησε μια συναλλαγή. Διαφορετικά, μπορείτε να κάνετε αναζήτηση στοTextστήλη BEGIN, SAVE, COMMIT ή ROLLBACK TRANSACTION λειτουργιών. Χρήση τουopen_tranτιμή από τοsysprocessesΠίνακας για να βεβαιωθείτε ότι έχετε επεξεργαστεί όλα τα συμβάντα κίνησης. Εάν γνωρίζετε τις εντολές που εκτελούνται και το περιβάλλον συναλλαγής θα μπορέσετε να προσδιορίσετε γιατί ένα αναγνωριστικό SPID κατέχει κλειδώματα.

    Να θυμάστε ότι μπορείτε να καταργήσετε στήλες συμβάντων και δεδομένων. Αντί να κοιτάζει τόσο έναρξης και ολοκλήρωσης συμβάντα, επιλέξτε μία. Εάν το SPID αποκλεισμού δεν είναι αποθηκευμένες διαδικασίες, καταργήστε τοSP: εκκίνησηήSP: ολοκληρώθηκεσυμβάντα, ενώ τοSQLBatchANDRPCσυμβάντα θα εμφανίζει τη διαδικασία κλήσης. Προβάλετε μόνο τα συμβάντα SP όταν χρειάζεται να δείτε αυτό το επίπεδο λεπτομερειών.
  • Τι είναι η διάρκεια των ερωτημάτων για SPID στην αρχή του αποκλεισμού αλυσίδες;
    Εάν περιλαμβάνετε το ολοκληρωμένο συμβάντα παραπάνω, τοΔιάρκειαστήλη θα εμφανίζει το χρόνο εκτέλεσης του ερωτήματος. Αυτό μπορεί να σας βοηθήσει να αναγνωρίσετε μακράς διαρκείας ερωτήματα που προκαλούν τον αποκλεισμό. Για να προσδιορίσετε γιατί το ερώτημα εκτελεί αργά, δείτε τηνCPU,Ανάγνωση (Read)ANDΕγγράφειστήλες, καθώς και τοΣχεδιασμός εκτέλεσηςΣυμβάν.

Κατηγοριοποίηση κοινά σενάρια αποκλεισμού

Ο παρακάτω πίνακας αντιστοιχίζει κοινά συμπτώματα με τις πιθανές αιτίες. Ο αριθμός που υποδεικνύεται στο πεδίο τουΣενάριοστήλη αντιστοιχεί στον αριθμό της ενότητας "Κοινές αποκλεισμού σενάρια και επίλυση" αυτού του άρθρου παρακάτω. Για ναWaittype,Open_TranANDΚατάστασηΑναφορά στηλώνsysprocessesΠληροφορίες. Για ναΕπιλύει;στήλη δηλώνει ή όχι τον αποκλεισμό θα επιλύσει από μόνη της.

Σύμπτυξη αυτού του πίνακαΑνάπτυξη αυτού του πίνακα
ΣενάριοWaittypeOpen_TranΚατάστασηΕπιλύει;Άλλα συμπτώματα
1Δεν είναι μηδέν>= 0runnableΝαι, κατά την ολοκλήρωση του ερωτήματος.Physical_IO, CPU ή/και Memusage στήλες θα αυξήσει τον καιρό. Θα είναι υψηλό κατά την ολοκλήρωση της διάρκειας για το ερώτημα.
20x0000> 0σε κατάσταση αναστολής λειτουργίαςΌχι, αλλά SPID είναι δυνατό να τερματιστούν.Ένα σήμα προσοχή ενδέχεται να είναι ορατά στο το Profiler έχει πραγματοποιηθεί ανίχνευση για το SPID, υποδηλώνοντας ένα χρονικό όριο ερωτήματος ή ακύρωσης.
30x0000> = 0runnableΟΧΙ,. Δεν θα λύσει μέχρι ο υπολογιστής-πελάτης λαμβάνει όλες τις γραμμές ή κλείνει τη σύνδεση. SPID είναι δυνατό να τερματιστούν, αλλά ενδέχεται να διαρκέσει έως 30 δευτερόλεπτα.Εάν,open_tran= 0, και το SPID διατηρεί τα κλειδώματα κατά προεπιλογή (ΑΝΆΓΝΩΣΗ COMMMITTED) είναι το επίπεδο απομόνωσης συναλλαγής, αυτή είναι μια πιθανή αιτία.
4varies> = 0runnableΟΧΙ,. Δεν θα λύσει μέχρι το πρόγραμμα-πελάτης ακυρώνει ερωτήματα ή κλείνει συνδέσεις. SPID είναι δυνατό να τερματιστούν, αλλά ενδέχεται να διαρκέσει έως 30 δευτερόλεπτα.Για ναHOSTNAMEστήληsysprocessesΤο SPID στην αρχή του αποκλεισμού αλυσίδα να είναι το ίδιο με ένα από τα SPID ο αποκλεισμός.
50x0000> 0ΕπαναφοράYES.Ένα σήμα προσοχή ενδέχεται να είναι ορατά με την παρακολούθηση Profiler για αυτό το αναγνωριστικό SPID, υποδηλώνοντας ένα χρονικό όριο ερωτήματος Παρουσιάστηκε ακύρωσης ή απλώς μια δήλωση επαναφοράς έχει εκδοθεί.
60x0000> 0σε κατάσταση αναστολής λειτουργίαςΤελικά. Όταν το Windows NT προσδιορίζει την περίοδο λειτουργίας είναι χωρίς περισσότερο ενεργή, ο SQL Server θα έχει διακοπεί η σύνδεση.Για ναlast_batchτιμήsysprocessesείναι πολύ νωρίτερα από την τρέχουσα ώρα.

Κοινά σενάρια αποκλεισμού και οι τρόποι επίλυσης

Τα σενάρια που παρατίθενται στη συνέχεια θα έχει τα χαρακτηριστικά που αναφέρονται στον παραπάνω πίνακα. Αυτή η ενότητα παρέχει πρόσθετες λεπτομέρειες όταν υπάρχει, καθώς και διαδρομές προς ανάλυση.
  1. Αποκλεισμός προκαλείται από μια κανονική εκτελούνται ερωτήματος με πολλή ώρα εκτέλεσης

    Επίλυση:
    Η λύση για αυτόν τον τύπο αποκλεισμού πρόβλημα είναι να αναζητήσει τρόπους για να βελτιστοποιήσετε το ερώτημα. Στην πραγματικότητα, αυτή η κλάση ζήτημα αποκλεισμού μπορεί απλώς να πρόβλημα απόδοσης και απαιτεί να αναζητήσετε ως τέτοια. For information on troubleshooting a specific slow-running query, see the following Microsoft Knowledge Base article:
    243589How to troubleshoot slow-running queries on SQL Server 7.0 or on later versions
    For overall application performance troubleshooting, see the following Knowledge Base article:
    224587HOW TO: Troubleshoot Application Performance with SQL Server
    Για περισσότερες πληροφορίες, ανατρέξτε στοPerformance Monitoring and Tuning How-to TopicsSQL Server 2008 Books Online topic on the following MSDN Web site:
    http://msdn.microsoft.com/en-us/library/ms187830.aspx
    If you have a long-running query that is blocking other users and cannot be optimized, consider moving it from an OLTP environment to a decision support system.
  2. Blocking Caused by a Sleeping SPID That Has Lost Track of the Transaction Nesting Level

    This type of blocking can often be identified by a SPID that is sleeping or awaiting a command, yet whose transaction nesting level (@@TRANCOUNT,open_tranfromsysprocesses) is greater than zero. This can occur if the application experiences a query timeout, or issues a cancel without also issuing the required number of ROLLBACK and/or COMMIT statements. When a SPID receives a query timeout or cancel, it will terminate the current query and batch, but does not automatically roll back or commit the transaction. The application is responsible for this, as SQL Server cannot assume that an entire transaction must be rolled back simply due to a single query being canceled. The query timeout or cancel will appear as an ATTENTION signal event for the SPID in the Profiler trace.

    To demonstrate this, issue the following simple query from Query Analyzer:

    BEGIN TRAN 
    SELECT * FROM SYSOBJECTS S1, SYSOBJECTS S2
    
    -- Issue this after canceling query
    SELECT @@TRANCOUNT
    ROLLBACK TRAN
    						
    While the query is executing, click the redΆκυρο (Cancel)το κουμπί. After the query is canceled, SELECT @@TRANCOUNT indicates that the transaction nesting level is one. Had this been a DELETE or an UPDATE query, or had HOLDLOCK been used on the SELECT, all the locks acquired would still be held. Even with the query above, if another query had acquired and held locks earlier in the transaction, they would still be held when the above SELECT was canceled.

    Resolutions:

    • Applications must properly manage transaction nesting levels, or they may cause a blocking problem following the cancellation of the query in this manner. This can be accomplished in one of several ways:
      1. Στο πρόγραμμα χειρισμού σφαλμάτων της εφαρμογής προγράμματος-πελάτη, υποβάλετε IF @@ TRANCOUNT > 0 TRAN ROLLBACK μετά από κάθε σφάλμα, ακόμη και αν η εφαρμογή υπολογιστή-πελάτη δεν πιστεύετε ότι μια συναλλαγή έχει ανοίξει. Αυτό είναι απαραίτητο, επειδή μια αποθηκευμένη διαδικασία που ονομάζεται κατά τη διάρκεια της δέσμης θα μπορούσε να έχει ξεκινήσει μια συναλλαγή χωρίς γνώση της εφαρμογής-πελάτη. Σημειώστε ότι ορισμένες συνθήκες, όπως την ακύρωση του ερωτήματος, εμποδίζει τη διαδικασία εκτέλεσης πέρα από την τρέχουσα πρόταση, αυτό συμβαίνει ακόμα και αν η διαδικασία έχει λογική ελέγχου IF @@ ΣΦΑΛΜΑ <> 0 και ματαίωση της συναλλαγής, αυτός ο κωδικός επαναφορά δεν θα εκτελεστεί σε αυτές τις περιπτώσεις.
      2. Μπορείτε να χρησιμοποιήσετε SET XACT_ABORT ON για τη σύνδεση ή σε οποιεσδήποτε αποθηκευμένες διαδικασίες που ξεκινούν συναλλαγές και όχι καθαρισμό των μετά από σφάλμα. Στην περίπτωση του ένα σφάλμα χρόνου εκτέλεσης, αυτή η ρύθμιση θα ματαίωση τυχόν ανοιχτές κινήσεις και να επαναφέρετε τον έλεγχο στον υπολογιστή-πελάτη. Σημειώστε ότι οι προτάσεις T SQL μετά από τη δήλωση που προκάλεσε το σφάλμα δεν θα εκτελεστεί.
      3. Εάν η ομαδοποίηση συνδέσεων που χρησιμοποιείται σε μια εφαρμογή που ανοίγει τη σύνδεση και να εκτελείται ένας μικρός αριθμός ερωτημάτων, πριν να απελευθερώσετε τη σύνδεση σε χώρο συγκέντρωσης, όπως μια εφαρμογή που βασίζεται στο Web, προσωρινή απενεργοποίηση ομαδοποίηση συνδέσεων μπορεί να βοηθήσει μετριάσει το πρόβλημα, μέχρι να τροποποιηθεί η εφαρμογή-πελάτης να χειρίζεται κατάλληλα τα σφάλματα. Απενεργοποιώντας ομαδοποίηση συνδέσεων, η αποδέσμευση της σύνδεσης θα προκαλέσει μια φυσική αποσύνδεσης της σύνδεσης του SQL Server, με αποτέλεσμα ο διακομιστής επαναφορά οποιαδήποτε ανοιχτά συναλλαγές.
      4. Εάν είναι ενεργοποιημένη η ομαδοποίηση συνδέσεων και ο διακομιστής προορισμού είναι SQL Server 2000, την αναβάθμιση του υπολογιστή-πελάτη για τα MDAC 2.6 ή νεότερη έκδοση μπορεί να είναι χρήσιμη. Αυτή η έκδοση των στοιχείων MDAC προσθέτει κώδικα για το πρόγραμμα οδήγησης ODBC και την υπηρεσία παροχής OLE DB, έτσι ώστε η σύνδεση θα είναι "Επαναφορά" πριν από την εκ νέου. Αυτή η κλήση σε sp_reset_connection ματαιώνει τις συναλλαγές που προετοιμάζονται από το διακομιστή (συναλλαγών DTC ξεκινά από την εφαρμογή προγράμματος-πελάτη δεν επηρεάζονται), επαναφέρει την προεπιλεγμένη βάση δεδομένων, επιλογές SET και ούτω καθεξής. Σημειώστε ότι η σύνδεση δεν γίνεται επαναφορά μέχρι να χρησιμοποιείται ξανά από τη σύνδεση, έτσι είναι πιθανό ότι ένας χρήστης μπορεί να ανοίξει μια συναλλαγή και αφήστε τη σύνδεση με το χώρο συγκέντρωσης σύνδεσης, αλλά ίσως δεν θα επαναχρησιμοποιούνται για μερικά δευτερόλεπτα, κατά τη διάρκεια που η συναλλαγή θα παραμείνει ανοιχτό. Εάν η σύνδεση δεν χρησιμοποιείται ξανά, όταν η σύνδεση λήγει και καταργείται από τη σύνδεση θα ματαιωθεί η συναλλαγή. Συνεπώς, είναι βέλτιστη για την εφαρμογή-πελάτη ματαίωση συναλλαγών με τους χειρισμού σφαλμάτων προγράμματος ή τη χρήση SET XACT_ABORT ON για να αποφύγετε αυτήν την πιθανή καθυστέρηση.
    • Στην πραγματικότητα, αυτή η κλάση πρόβλημα αποκλεισμού μπορεί επίσης να πρόβλημα απόδοσης και απαιτεί να αναζητήσετε ως τέτοια. Εάν ο χρόνος εκτέλεσης ερωτήματος μπορεί να υποβαθμιστεί, το χρονικό όριο ερωτήματος ή ακύρωσης δεν θα προκύψει. Είναι σημαντικό ότι η εφαρμογή μπορεί να χειριστεί το χρονικό όριο ή ακύρωση σενάρια θα πρέπει αυτά προκύπτουν, αλλά μπορείτε επίσης μπορεί να ωφεληθεί από την Εξέταση την απόδοση του ερωτήματος.
  3. Αποκλεισμός προκαλείται από ένα αναγνωριστικό SPID, του οποίου η αντίστοιχη εφαρμογή προγράμματος-πελάτη δεν λήψης όλων των γραμμών του αποτελέσματος για την ολοκλήρωση

    Μετά την αποστολή ενός ερωτήματος στο διακομιστή, όλες οι εφαρμογές πρέπει να αμέσως λήψη όλων των γραμμών του αποτελέσματος ολοκλήρωσης. Εάν μια εφαρμογή λήψης δεν όλων των γραμμών του αποτελέσματος, τα κλειδώματα μπορεί να μείνει στους πίνακες, ο αποκλεισμός άλλων χρηστών. Εάν χρησιμοποιείτε μια εφαρμογή που υποβάλλει διαφανώς SQL εντολές στο διακομιστή, η εφαρμογή πρέπει να λάβει όλων των γραμμών του αποτελέσματος. Αν δεν έχει (και δεν είναι δυνατό να ρυθμιστούν για να το κάνετε), ενδέχεται να μην μπορείτε να επιλύσετε το ζήτημα αποκλεισμού. To avoid the problem, you can restrict poorly-behaved applications to a reporting or a decision-support database.

    Επίλυση:

    The application must be re-written to fetch all rows of the result to completion.
  4. Blocking Caused by a Distributed Client/Server Deadlock

    Unlike a conventional deadlock, a distributed deadlock is not detectable using the RDBMS lock manager. This is due to the fact that only one of the resources involved in the deadlock is a SQL Server lock. The other side of the deadlock is at the client application level, over which SQL Server has no control. The following are two examples of how this can happen, and possible ways the application can avoid it.

    1. Client/Server Distributed Deadlock with a Single Client Thread
      If the client has multiple open connections, and a single thread of execution, the following distributed deadlock may occur. For brevity, the term "dbproc" used here refers to the client connection structure.

       SPID1------blocked on lock------->SPID2
        /\                         (waiting to write results         
        |                           back to client)
        |                                 |
        |                                 |                      Server side
        | ================================|==================================
        |     <-- single thread -->       |                      Client side
        |                                 \/ 
       dbproc1   <-------------------   dbproc2
       (waiting to fetch             (effectively blocked on dbproc1, awaiting
        next row)                     single thread of execution to run)
      								
      In the case shown above, a single client application thread has two open connections. It asynchronously submits a SQL operation on dbproc1. This means it does not wait on the call to return before proceeding. The application then submits another SQL operation on dbproc2, and awaits the results to start processing the returned data. When data starts coming back (whichever dbproc first responds -- assume this is dbproc1), it processes to completion all the data returned on that dbproc. It fetches results from dbproc1 until SPID1 gets blocked on a lock held by SPID2 (because the two queries are running asynchronously on the server). At this point, dbproc1 will wait indefinitely for more data. SPID2 is not blocked on a lock, but tries to send data to its client, dbproc2. However, dbproc2 is effectively blocked on dbproc1 at the application layer as the single thread of execution for the application is in use by dbproc1. This results in a deadlock that SQL Server cannot detect or resolve because only one of the resources involved is a SQL Server resource.
    2. Client/Server Distributed Deadlock with a Thread per Connection

      Even if a separate thread exists for each connection on the client, a variation of this distributed deadlock may still occur as shown by the following.

      SPID1------blocked on lock-------->SPID2
        /\                         (waiting on net write)        Server side
        |                                 |
        |                                 |
        | INSERT                          |SELECT
        | ================================|==================================
        |     <-- thread per dbproc -->   |                      Client side
        |                                 \/ 
       dbproc1   <-----data row-------   dbproc2
       (waiting on                     (blocked on dbproc1, waiting for it
        insert)                         to read the row from its buffer)
      								
      This case is similar to Example A, except dbproc2 and SPID2 are running a SELECT statement with the intention of performing row-at-a-time processing and handing each row through a buffer to dbproc1 for an INSERT, UPDATE, or DELETE statement on the same table. Eventually, SPID1 (performing the INSERT, UPDATE, or DELETE) becomes blocked on a lock held by SPID2 (performing the SELECT). SPID2 writes a result row to the client dbproc2. Dbproc2 then tries to pass the row in a buffer to dbproc1, but finds dbproc1 is busy (it is blocked waiting on SPID1 to finish the current INSERT, which is blocked on SPID2). At this point, dbproc2 is blocked at the application layer by dbproc1 whose SPID (SPID1) is blocked at the database level by SPID2. Again, this results in a deadlock that SQL Server cannot detect or resolve because only one of the resources involved is a SQL Server resource.
    Both examples A and B are fundamental issues that application developers must be aware of. They must code applications to handle these cases appropriately.

    Resolutions:

    Two reliable solutions are to use either a query timeout or bound connections.

    • Query Timeout
      When a query timeout has been provided, if the distributed deadlock occurs, it will be broken when then timeout happens. See the DB-Library or ODBC documentation for more information on using a query timeout.
    • Bound Connections
      This feature allows a client having multiple connections to bind them into a single transaction space, so the connections do not block each other. For more information, see the "Using Bound Connections" topic in SQL Server 7.0 Books Online.
  5. Blocking Caused by a SPID That Is in a "Golden," or Rollback, State

    A data modification query that is KILLed, or canceled outside of a user-defined transaction, will be rolled back. This can also occur as a side effect of the client computer restarting and its network session disconnecting. Likewise, a query selected as the deadlock victim will be rolled back. A data modification query often cannot be rolled back any faster than the changes were initially applied. For example, if a DELETE, INSERT, or UPDATE statement had been running for an hour, it could take at least an hour to roll back. This is expected behavior, because the changes made must be completely rolled back, or transactional and physical integrity in the database would be compromised. Because this must happen, SQL Server marks the SPID in a "golden" or rollback state (which means it cannot be KILLed or selected as a deadlock victim). This can often be identified by observing the output ofsp_who, which may indicate the ROLLBACK command. Για ναΚατάστασηcolumn ofsys.sysprocesseswill indicate a ROLLBACK status, which will also appear insp_whooutput or in SQL Server Management Studio Activity Monitor.
    Επίλυση:

    You must wait for the SPID to finish rolling back the changes that were made.

    Εάν τερματίζεται στη μέση της αυτήν τη λειτουργία στο διακομιστή της βάσης δεδομένων θα είναι σε κατάσταση λειτουργίας αποκατάστασης κατά την επανεκκίνηση και θα είναι δυνατή η πρόσβαση μέχρι όλες οι ανοιχτές επεξεργάζονται συναλλαγές. Εκκίνηση αποκατάστασης έχει ουσιαστικά το ίδιο χρονικό διάστημα ανά συναλλαγή ως αποκατάστασης κατά το χρόνο εκτέλεσης και η βάση δεδομένων δεν είναι προσβάσιμο κατά τη διάρκεια αυτής της περιόδου. Συνεπώς, αναγκάζοντας το διακομιστή προς τα κάτω για την επιδιόρθωση ενός SPID σε κατάσταση επαναφοράς συχνά θα counterproductive.

    Για να αποφύγετε αυτήν την περίπτωση, δεν εκτελέσετε μεγάλη δέσμης INSERT, UPDATE, ή DELETE λειτουργίες κατά τις ώρες απασχόλησης σε συστήματα OLTP. Εάν είναι δυνατό, εκτελούν τέτοιες λειτουργίες κατά τη διάρκεια περιόδων χαμηλής δραστηριότητας.
  6. Αποκλεισμός προκαλείται από μια ορφανή σύνδεσης

    Εάν γίνει επανεκκίνηση τις παγιδεύσεις εφαρμογή προγράμματος-πελάτη ή στο σταθμό εργασίας του υπολογιστή-πελάτη, η περίοδος λειτουργίας του δικτύου στο διακομιστή ίσως δεν αμέσως Ακύρωση υπό ορισμένες συνθήκες. Από την πλευρά του διακομιστή, το πρόγραμμα-πελάτης εξακολουθεί να εμφανίζεται να είναι παρόντα και εξακολουθεί να μπορεί να διατηρηθεί κλειδωμάτων που αποκτήθηκε.Για περισσότερες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
    137983Τρόπος αντιμετώπισης προβλημάτων ορφανών συνδέσεις στον SQL Server

    Επίλυση:

    Εάν η εφαρμογή-πελάτης έχει αποσυνδεθεί χωρίς εκκαθάριση σωστά τους πόρους του, μπορείτε να τερματίσετε το SPID, χρησιμοποιώντας την εντολή KILL. Η εντολή KILL παίρνει την τιμή SPID ως δεδομένα εισόδου. Για παράδειγμα, να τερματισμού SPID 9, απλά εκδίδει την ακόλουθη εντολή:

    KILL 9
    						

    ΣΗΜΕΙΩΣΗΗ εντολή KILL ενδέχεται να διαρκέσει έως 30 δευτερόλεπτα για να ολοκληρωθεί, επειδή για το χρονικό διάστημα που μεσολαβεί μεταξύ των ελέγχων για την εντολή KILL.

Εφαρμογή συμμετοχή σε ζητήματα αποκλεισμού

Ενδέχεται να υπάρχει μια τάση για να εστιάσετε σε θέματα ρύθμισης και πλατφόρμα διακομιστή όταν αντιμετωπίζουν πρόβλημα αποκλεισμού. Ωστόσο, αυτό δεν οδηγούν συνήθως σε ανάλυση και να absorb χρόνο και καλύτερα απευθύνονται σε εξέταση της εφαρμογής-πελάτη και τα ερωτήματα που υποβάλλει την ενέργεια. Ανεξάρτητα από το επίπεδο ορατότητας της εφαρμογής εκθέτει όσον αφορά των κλήσεων βάσης δεδομένων που γίνεται κάποιο πρόβλημα εμποδίζει ωστόσο συχνά απαιτεί την Εξέταση από τις ακριβείς προτάσεις SQL που υποβλήθηκαν από την εφαρμογή και τη συμπεριφορά της εφαρμογής ακριβής όσον αφορά την ακύρωση του ερωτήματος, διαχείριση της σύνδεσης, η λήψη όλων προκύπτουν γραμμές, και ούτω καθεξής. Εάν το εργαλείο ανάπτυξης δεν επιτρέπει το ρητό έλεγχο διαχείρισης σύνδεσης, Ακύρωση ερωτήματος, το χρονικό όριο ερωτήματος, λήψη αποτελεσμάτων και ούτω καθεξής, ενδέχεται να μην είναι resolvable προβλήματα αποκλεισμού. Αυτό το ενδεχόμενο πρέπει να εξετάζονται προσεκτικά πριν να επιλέξετε ένα εργαλείο ανάπτυξης εφαρμογών για τον SQL Server, ιδιαίτερα για σημαντικά εταιρικά περιβάλλοντα OLTP.

Είναι σημαντικό ότι θα χρησιμοποιηθούν μεγάλη προσοχή κατά τη φάση σχεδίασης και κατασκευής της βάσης δεδομένων και εφαρμογών. Συγκεκριμένα, η κατανάλωση πόρων, επίπεδο απομόνωσης και μήκους διαδρομής κίνησης πρέπει να υπολογιστεί για κάθε ερώτημα. Κάθε ερώτημα και η συναλλαγή θα πρέπει να είναι τόσο ελαφρύ όσο το δυνατό. Καλή σύνδεση διαχείρισης κατεύθυνσης πρέπει να χρησιμοποιηθούν. Αν δεν γίνει αυτό, είναι πιθανό ότι η εφαρμογή μπορεί να φαίνεται ότι έχουν αποδεκτές επιδόσεις σε χαμηλή τους αριθμούς των χρηστών, αλλά οι επιδόσεις μπορεί να μειωθεί σημαντικά με τον αριθμό των χρηστών κλίμακες προς τα επάνω.

Με την κατάλληλη εφαρμογή και η Σχεδίαση ερωτήματος, Microsoft SQL Server είναι ικανό να υποστηρίζει πολλές χιλιάδες χρήστες ταυτόχρονα σε ένα μεμονωμένο διακομιστή, με λίγη αποκλεισμού.

Ιδιότητες

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

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

 

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