Both heaps and B-trees can span multiple allocation units. The amount of memory available to SQL Server decides how many pages will be cached in memory. The buffer cache is managed by the Buffer Manager. Either reading from or writing to any page copies it to the buffer cache. Subsequent reads or writes are redirected to the in-memory copy, rather than the on-disc version.
The page is updated on the disc by the Buffer Manager only if the in-memory cache has not been referenced for some time. Each page is written along with its checksum when it is written. When reading the page back, its checksum is computed again and matched with the stored version to ensure the page has not been damaged or tampered with in the meantime. SQL Server allows multiple clients to use the same database concurrently. As such, it needs to control concurrent access to shared data, to ensure data integrity—when multiple clients update the same data, or clients attempt to read data that is in the process of being changed by another client.
SQL Server provides two modes of concurrency control: pessimistic concurrency and optimistic concurrency. When pessimistic concurrency control is being used, SQL Server controls concurrent access by using locks. Locks can be either shared or exclusive. Exclusive lock grants the user exclusive access to the data—no other user can access the data as long as the lock is held.
Inside Microsoft SQL Server 2008 T-SQL Querying
Shared locks are used when some data is being read—multiple users can read from data locked with a shared lock, but not acquire an exclusive lock. The latter would have to wait for all shared locks to be released.
- The Cleaner Plate Club: More Than 100 Recipes for Real Food Your Kids Will Love.
- Constructing Identities in Mexican American Political Organizations: Choosing Issues, Taking Sides!
- The Cambridge History of Literary Criticism: Twentieth-Century Historical, Philosophical and Psychological Perspectives (Cambridge History of Literary Criticism, Volume 9).
- Sonata in A major - K74/P34/L94.
- Godels Proof, Revised Edition.
Locks can be applied on different levels of granularity—on entire tables, pages, or even on a per-row basis on tables. For indexes, it can either be on the entire index or on index leaves. The level of granularity to be used is defined on a per-database basis by the database administrator.
New Book – T-SQL Programming | IT Pro
While a fine-grained locking system allows more users to use the table or index simultaneously, it requires more resources, so it does not automatically yield higher performance. SQL Server also includes two more lightweight mutual exclusion solutions—latches and spinlocks—which are less robust than locks but are less resource intensive. SQL Server also monitors all worker threads that acquire locks to ensure that they do not end up in deadlocks —in case they do, SQL Server takes remedial measures, which in many cases are to kill one of the threads entangled in a deadlock and roll back the transaction it started.
The Lock Manager maintains an in-memory table that manages the database objects and locks, if any, on them along with other metadata about the lock. Access to any shared object is mediated by the lock manager, which either grants access to the resource or blocks it. SQL Server also provides the optimistic concurrency control mechanism, which is similar to the multiversion concurrency control used in other databases.
The mechanism allows a new version of a row to be created whenever the row is updated, as opposed to overwriting the row, i. Both the old as well as the new versions of the row are stored and maintained, though the old versions are moved out of the database into a system database identified as Tempdb.
When a row is in the process of being updated, any other requests are not blocked unlike locking but are executed on the older version of the row. If the other request is an update statement, it will result in two different versions of the rows—both of them will be stored by the database, identified by their respective transaction IDs.
- You may also be interested in....
- New book: Inside Microsoft SQL Server T-SQL Querying – Microsoft Press blog!
- Curse of the Wolfman (A thrilling werewolf classic!)?
- .net - Recommended SQL Server / T-SQL book - Stack Overflow;
- Account Options?
- Brasseys History of Uniforms - Napoleonic Wars. Wellingtons Army.
The main mode of retrieving data from a SQL Server database is querying for it. The query declaratively specifies what is to be retrieved. It is processed by the query processor, which figures out the sequence of steps that will be necessary to retrieve the requested data.
The sequence of actions necessary to execute a query is called a query plan. There might be multiple ways to process the same query. For example, for a query that contains a join statement and a select statement, executing join on both the tables and then executing select on the results would give the same result as selecting from each table and then executing the join, but result in different execution plans. In such case, SQL Server chooses the plan that is expected to yield the results in the shortest possible time. This is called query optimization and is performed by the query processor itself.
SQL Server includes a cost-based query optimizer which tries to optimize on the cost, in terms of the resources it will take to execute the query. Given a query, then the query optimizer looks at the database schema , the database statistics and the system load at that time. It then decides which sequence to access the tables referred in the query, which sequence to execute the operations and what access method to be used to access the tables. For example, if the table has an associated index, whether the index should be used or not: if the index is on a column which is not unique for most of the columns low "selectivity" , it might not be worthwhile to use the index to access the data.
Finally, it decides whether to execute the query concurrently or not. While a concurrent execution is more costly in terms of total processor time, because the execution is actually split to different processors might mean it will execute faster. Once a query plan is generated for a query, it is temporarily cached. For further invocations of the same query, the cached plan is used. Unused plans are discarded after some time. SQL Server also allows stored procedures to be defined.
Inside Microsoft SQL Server 2008: T-SQL Programming
Stored procedures are parameterized T-SQL queries, that are stored in the server itself and not issued by the client application as is the case with general queries. Stored procedures can accept values sent by the client as input parameters, and send back results as output parameters. They can call defined functions, and other stored procedures, including the same stored procedure up to a set number of times.
They can be selectively provided access to. Unlike other queries, stored procedures have an associated name, which is used at runtime to resolve into the actual queries. Also because the code need not be sent from the client every time as it can be accessed by name , it reduces network traffic and somewhat improves performance. It exposes keywords for the operations that can be performed on SQL Server, including creating and altering database schemas, entering and editing data in the database as well as monitoring and managing the server itself. Client applications that consume data or manage the server will leverage SQL Server functionality by sending T-SQL queries and statements which are then processed by the server and results or errors returned to the client application.
For this it exposes read-only tables from which server statistics can be read. Management functionality is exposed via system-defined stored procedures which can be invoked from T-SQL queries to perform the management operation. Linked servers allow a single query to process operations performed on multiple servers. It natively implements support for the SQL Server features including the Tabular Data Stream implementation, support for mirrored SQL Server databases, full support for all data types supported by SQL Server, asynchronous operations, query notifications, encryption support, as well as receiving multiple result sets in a single database session.
NET Framework. Unlike most other applications that use. NET Framework runtime , i. SQLOS provides deadlock detection and resolution services for. NET code as well.
More titles to consider
Managed code can also be used to define UDT's user defined types , which can persist in the database. Managed code is compiled to CLI assemblies and after being verified for type safety , registered at the database.
- Inside Microsoft SQL Server 2008: T-SQL Querying.
- The Pillars of Hercules: A Grand Tour of the Mediterranean?
- You may also be interested in....
- Inside Microsoft SQL Server T-SQL Querying (Solid Quality Learning) - PDF Free Download.
After that, they can be invoked like any other procedure. Most APIs relating to user interface functionality are not available. However, doing that creates a new database session, different from the one in which the code is executing. NET provider that allows the connection to be redirected to the same session which already hosts the running code. Such connections are called context connections and are set by setting context connection parameter to true in the connection string.
NET API, including classes to work with tabular data or a single row of data as well as classes to work with internal metadata about the data stored in the database. SQL Server also includes an assortment of add-on services. While these are not essential for the operation of the database system, they provide value added services on top of the core database management system.