5
SQL Server 2008 Tips By The Technocrats Use the Query Governor to Control Excessive Query Execution The query governor does not allow the execution of any query that has a running time that exceeds a specified query cost. The query cost is the estimated time, in seconds, required to execute a query, and it is estimated prior to execution based on an analysis by the query engine. By default, the query governor is turned off, meaning there is no maximum cost. To activate the query governor, complete the following steps: 1. In the Server Properties dialog box, go to the Connections page. 2. Select the option Use Query Governor To Prevent Long-Running Queries. 3. In the box below the option, type a maximum query cost limit. The valid range is 0 through 2,147,483,647. A value of 0 disables the query governor; any other value sets a maximum query cost limit. 4. Click OK. With sp_configure, the following Transact-SQL statement will activate the query governor: exec sp_configure "query governor cost limit", <limit> You can also set a per-connection query cost limit in Transact-SQL using the following statement: set query_governor_cost_limit <limit> Note Before you activate the query governor, you should use the Query view to estimate the cost of current queries you are running on the server. This will give you a good idea of a value to use for the maximum query cost. You can also use the Query view to optimize queries. Manage Access and Roles with Transact-SQL (T-SQL) Commands SQL Server provides different commands for managing database access and roles. Here is a summary of the commands you can use. Adding a User to the Current Database: CREATE USER user_name [ { { FOR | FROM } { LOGIN login_name | CERTIFICATE certificate_name | ASYMMETRIC KEY asym_key_name } ] [ WITH DEFAULT_SCHEMA = schema_name ] Renaming a User or Changing Default Schema: ALTER USER user_name WITH < set_item > [ ,...n ]

SQL Server 2008 Tips_2

Embed Size (px)

Citation preview

Page 1: SQL Server 2008 Tips_2

SQL Server 2008 Tips

By

The Technocrats

Use the Query Governor to Control Excessive Query

Execution

The query governor does not allow the execution of any query that has a running time that exceeds a specified query cost. The

query cost is the estimated time, in seconds, required to execute a query, and it is estimated prior to execution based on an

analysis by the query engine. By default, the query governor is turned off, meaning there is no maximum cost. To activate the

query governor, complete the following steps:

1. In the Server Properties dialog box, go to the Connections page.

2. Select the option Use Query Governor To Prevent Long-Running Queries.

3. In the box below the option, type a maximum query cost limit. The valid range is 0 through 2,147,483,647. A value of 0 disables

the query governor; any other value sets a maximum query cost limit.

4. Click OK. With sp_configure, the following Transact-SQL statement will activate the query governor:

exec sp_configure "query governor cost limit", <limit>

You can also set a per-connection query cost limit in Transact-SQL using the following statement:

set query_governor_cost_limit <limit>

Note Before you activate the query governor, you should use the Query view to estimate the cost of current queries you are

running on the server. This will give you a good idea of a value to use for the maximum query cost. You can also use the Query

view to optimize queries.

Manage Access and Roles with Transact-SQL (T-SQL)

Commands

SQL Server provides different commands for managing database access and roles. Here is a summary of the commands you can

use. Adding a User to the Current Database:

CREATE USER user_name

[ { { FOR | FROM }

{ LOGIN login_name

| CERTIFICATE certificate_name

| ASYMMETRIC KEY asym_key_name

}

]

[ WITH DEFAULT_SCHEMA = schema_name ]

Renaming a User or Changing Default Schema:

ALTER USER user_name

WITH < set_item > [ ,...n ]

Page 2: SQL Server 2008 Tips_2

< set_item > ::=

NAME = new_user_name

| DEFAULT_SCHEMA = schema_name

Removing a User from a Database:

DROP USER user_name

Listing Server Role Members:

sp_helpsrvrolemember [[@rolename =] 'role']

Managing Database Standard Roles:

CREATE ROLE role_name [ AUTHORIZATION owner_name ]

ALTER ROLE role_name WITH NAME = new_name

DROP ROLE role_name

sp_helprole [[@rolename =] 'role']

Managing Database Role Members:

sp_addrolemember [@rolename =] 'role',

[@membername =] 'security_account'

sp_droprolemember [@rolename =] 'role',

[@membername =] 'security_account'

sp_helprolemember [[@rolename =] 'role']

Managing Application Roles:

CREATE APPLICATION ROLE application_role_name

WITH PASSWORD = 'password' [ , DEFAULT_SCHEMA = schema_name ]

ALTER APPLICATION ROLE application_role_name

WITH <set_item> [ ,...n ]

<set_item> ::=

NAME = new_application_role_name

| PASSWORD = 'password'

| DEFAULT_SCHEMA = schema_name

DROP APPLICATION ROLE rolename

Page 3: SQL Server 2008 Tips_2

Understand the Replication Models in SQL Server 2008

The architecture for the replication process is extensive. This ensures that the architecture is versatile enough to meet the needs of

almost any replication situation. Unfortunately, this versatility also makes replication tricky to configure. To make the replication go smoothly, you should do a bit of planning, which involves selecting a specific replication model and

performing any necessary preliminary tasks before you start configuring replication.

The main decision to make when you select a replication model involves the physical layout of the publisher, distributor, and

subscriber databases. Common replication models that you might want to use include:

Peer-to-peer model Allows replication between identical participants in the topology. The advantage of this model is that it

permits roles to move between replicated nodes dynamically for maintenance or failure management. The disadvantage is the

additional administration overhead involved with moving roles.

Central publisher model Maintains the publisher and distributor databases on the same server, with one or more subscribers

configured on other servers. The advantages of this model are manageability and ease of maintenance. The disadvantages include

the extra workload and resource usage on the publication server.

Central publisher with remote distributor model Maintains the publisher and distributor databases on different servers, with

one or more subscribers configured on other servers. The advantage of this model is that the workload is more evenly distributed.

The disadvantage is that you have to maintain an additional server.

Central subscriber model A single subscriber database that collects data from several publishers. For example, if you have

ServerA, ServerB, and ServerC, ServerA and ServerB act as central publishers and ServerC acts as the central subscriber. In this

configuration, when updates are distributed from ServerA and ServerB, they are collected on ServerC. A central subscriber can then

republish the combined data to other servers. To use this model, all tables used in replication must have a unique primary key;

otherwise, the replication model will not work properly.

Publishing subscriber model Relays the distribution of data to other subscribers; you can use this with any of the other models.

For example, if you have two geographically separated sites, a publisher can replicate data to servers at site A and then have a

publishing subscriber at site B that distributes the data to servers at site B.

The central publisher model is the most commonly used replication model. Unfortunately, you will often find that the extra load on

the publication server will slow down server performance. To reduce the server load, you should put the distributor on its own

server. Be aware, however, that doing this will not entirely eliminate the workload on the publication server. The publisher and

distributor still need to communicate, and they still need to pass data back and forth.

Monitor SQL Server Performance and Activity with Built-In

Functions

In addition to having the use of log files and Transact-SQL statements, you will find a set of built-in functions that return system

information. Here’s an overview of key built-in functions and their usages. The values returned by these functions are cumulative

from the time SQL Server was last started.

Built-In Functions for Monitoring SQL Server Performance and Activity

Function Description Example

@@connections Returns the number of

connections or

attempted connections

select @@connections as 'Total

Login Attempts'

@@cpu_busy Returns CPU

processing time in

milliseconds for SQL

Server activity

select @@cpu_busy as 'CPU

Busy', getdate() as 'Since'

@@idle Returns SQL Server

idle time in

milliseconds

select @@idle as 'Idle Time',

getdate() as 'Since'

@@io_busy Returns I/O select @@io_busy as 'IO Time',

Page 4: SQL Server 2008 Tips_2

processing time in

milliseconds

getdate() as 'Since' for SQL

Server

@@pack_received Returns the number of

input packets read

from the network by

SQL Server

select @@pack_received as

'Packets Received'

@@pack_sent Returns the number of

output packets written

to the network by SQL

Server

select @@pack_sent as 'Packets

Sent'

@@packet_errors Returns the number of

network packet errors

for SQL Server

connections

select @@packet_errors as

'Packet Errors'

@@timeticks Returns the number of

microseconds per

CPU clock tick

select @@timeticks as 'Clock

Ticks'

@@total_errors Returns the number of

disk read/write errors

encountered by SQL

Server

select @@total_errors as 'Total

Errors', getdate() as 'Since'

@@total_read Returns the number of

disk reads by SQL

Server

select @@total_read as 'Reads',

getdate() as 'Since'

@@total_write Returns the number of

disk writes by SQL

Server

select @@total_write as 'Writes',

getdate() as 'Since'

fn_virtualfilestats Returns input/output

statistics for data and

log files

select * from

fn_virtualfilestats(null,null)

How to Quickly Create a Copy of a Table using Transact-SQL

The easiest way to create a copy of a table is to use a Transact-SQL command. Use SELECT INTO to extract all the rows from an

existing table into the new table. The new table must not exist already. The following example will copy the Customers table under

the Salesschema to a new table called CurrCustomers under the BizDev schema:

SELECT * INTO BizDev.CurrCustomers FROM Sales.Customers You can also create the new table from a specific subset of columns in the original table. In this case, you specify the names of the

columns to copy after the SELECT keyword. Any columns not specified are excluded from the new table. The following example

copies specific columns to a new table:

Page 5: SQL Server 2008 Tips_2

SELECT CustName, Address, Telephone, Email INTO BizDev.CurrCustomers

FROM Sales.Customers

Use New Cmdlets in SQL Server PowerShell to Mange SQL

Server 2008

When you are working with the SQL Server PowerShell, the available cmdlets are different than when you are working with the

standard Windows PowerShell. The reason for this is that the set of registered snap-ins is different. Additional SQL Server–specific

cmdlets are available, and some standard PowerShell cmdlets might not be available. In the original implementation of SQL Server PowerShell, the following additional cmdlets are included:

Convert-UrnToPath Converts a SQL Server Management Object Uniform Resource Name (URN) to a SQL Server

provider path. The URN indicates a management object’s location within the SQL Server object hierarchy. If the URN path

has characters not supported by PowerShell, the characters are encoded automatically.

Decode-SQLName Returns an unencoded SQL Server identifier when given an identifier that has been encoded.

Encode-SQLName Encodes special characters in SQL Server identifiers and name paths to formats that are usable in

PowerShell paths. The characters encoded by this cmdlet include \:/%<>*?[]|. If you don’t encode these characters, you

must escape them using the single quote (') character.

Invoke-PolicyEvaluation Evaluates management policies applied to SQL Server instances. By default, this command

reports compliance but does not enforce compliance. To enforce compliance, set –AdHocPolicyEvaluationMode to

Configure.

Invoke-SQLCmd Runs a Transact-SQL or XQuery script containing commands supported by the sqlcmd utility. By

default, this cmdlet doesn’t set any sqlcmd variables by default or return message output. (Many sqlcmd commands

aren’t supported.)

As the set of available cmdlets and cmdlet options change as new versions of SQL Server PowerShell are released, you can use the

following techniques to discover new cmdlets and determine how they are used:

To view a list of all cmdlets, type get-command at the shell prompt.

To get detailed information about a cmdlet, type get-help CmdletName –detailed where CmdletName is the name of

the cmdlet you want to examine.

To get detailed information about the SQL Server provider, which provides the SQL Server functionality for PowerShell,

type get-help sqlserver | more.