11 September, 2010

Resource Governor

Today I’ll demonstrate how to create and control Resource Governor.

But before I do that, i need to say what is Resource Governor.

Well Resource Governor is a new feature in SQL 2008 that lets you control how the resources available to SQL are distributed to applications.

for now on I’ll use RG for Resource Governor.

To do this RG have the following concepts:

Resource Pools: which are configurations that are bound to a amount of resource on SQL server.

And.

Workload Groups: which are groups where applications will be classified and grouped.

and to finish up there’s the function that defines what Workload Group the applications (done for every connection) will belong to.

To better illustrate this you can check this diagram from TechNet.

rg_basic_funct_components(en-us,SQL.105)

taken from: http://technet.microsoft.com/en-us/library/bb934084.aspx

With the Resource Governor you can set how much CPU or Memory a Resource Pool will have, and on the Workload Group you can say how much will the apps in there will request.

It works like this:

You create a Resource Pool that says it will use a minimum of 10% CPU and a maximum of 70% and for memory you say minimum 0% and maximum 50%. Now you create a workload group that says it will use the before mentioned resource pool and that request’s a maximum of 30 seconds of CPU Time.

All that you can do through SSMS 2008, however the tricky part is how you say an application is part of this Group?

There’s something called Classifier Function.

On every connection to SQL there will be an evaluation that says on which group the connection belongs to.

So What is this Classifier Function and how do you create one?

Well its a User Defined Function, a normal function that returns the name of the group.

How do you create one?

Well only through Transact SQL, this is not even visible on SSMS.

So here’s an example of the full transact SQL.

BEGIN TRANSACTION
USE master
-- Create a resource pool that sets:
--MIN_CPU_PERCENT to 10%.
--MAX_CPU_PERCENT to 70%.
--MIN_MEMORY_PERCENT to 0%.
--MAX_MEMORY_PERCENT to 50%.
CREATE RESOURCE POOL SSMS_RESOURCE_POOL
WITH
(MAX_CPU_PERCENT = 70
, MIN_CPU_PERCENT = 10,
MIN_MEMORY_PERCENT = 0
, MAX_MEMORY_PERCENT = 50);
GO
-- Create a workload group to use this pool
-- with its maximum request of CPU Time being 30s
CREATE WORKLOAD GROUP SSMS_WORKLOAD_GROUP
WITH
(REQUEST_MAX_CPU_TIME_SEC = 30)
USING SSMS_RESOURCE_POOL;
GO
-- Create a classification function.
-- test the application name on the application
-- assign a workload group based on the application
-- otherwise redirect to the default group (NULL)

CREATE FUNCTION
dbo.resource_governor_classification_function()
returns sysname
WITH SCHEMABINDING
AS
BEGIN
IF APP_NAME() LIKE
'Microsoft SQL Server Management Studio%'
BEGIN
RETURN 'SSMS_WORKLOAD_GROUP'
END
return NULL
END
GO
ALTER RESOURCE GOVERNOR WITH
(CLASSIFIER_FUNCTION =
dbo.resource_governor_classification_function);
COMMIT TRANSACTION
ALTER RESOURCE GOVERNOR RECONFIGURE;


Hope that this clarifies it a bit, and after testing it yourselves you get to understand it better.

23 June, 2010

Generating a Table’s diagram and Script

Great tip for Entity-relationship model and script generation.

A great tool for building Entity-relationship models for databases and it’s scripts

http://ondras.zarovi.cz/sql/demo/

it generates mysql, sqlite, web2py, mssql (Microsoft sql), postgresql, oracle, sqlalchemy, vfp9 scripts for a designed model.

Options Menu You can select the language in the options, and then start designing the database, or do that in the end when you want to generate the full script, this helps you to create a ERM model and visually see the relationship’s test your ideas and see if they really work.

Creating Tables

You can start by creating tables using the menu Add Table button, you may be tempted to drag a table, but that won’t work, just click the diagram and there will be a dialog asking you the name of the table. The table comes with an default id field, you can edit it, changing it’s type by double clicking it, then selecting it's name, type, size (when applicable), if it is a auto increment field, and if it allows nulls. You can add new fields with the Add field button also in the Menu and create new fields on the desired table.

Creating Relationships

Relationships can be created in two ways in here, first you can create the destiny field in the desired tables and then select which one is part of the key (only keys can be related)  then click Connect foreign key, and the connection between the fields will be created (and also the foreign key). The other way of doing it is by only creating the field on the source table and then selecting the field (must be part of the key),  clicking on the menu Create foreign key and then selecting the table you want to have the key, the field should be created automatically.

Setting a Primary Key

When you select a table you can use the menu to define it’s unique key (a table doesn’t need to have one, but its highly desired), you can click the Keys menu item, there you can define which columns are part of the primary key, moreover you can also define indexes, and which columns are part of the index, however I don’t think you can create an index that includes some columns but are not part of the index.

After that you can select Save/Load and Generate SQL for the script.

Also one nice trick is that you can download this to work locally, click on documentation and Installation then follow the instructions and use.

Here’s a diagram example:

Simple Diagram

Hope this helps
Good Luck
The Developer Seer.

11 June, 2010

Silverlight Lifecycle Support End Date

I first seen something related to this in here however I needed an official Microsoft web site saying the same, and today I found it.
The dates are:

Version End Date
Silverlight 2October 12, 2010
Silverlight 3April 12, 2011
Silverlight 4Twelve Months after the release of Silverlight 5

The official source is this one:

http://support.microsoft.com/gp/lifean45?ln=en-us

Hope this helps,
The Developer Seer.

02 June, 2010

Refreshing the Intellisense cache in SSMS 2008

I'm currently using alot SQL Server Management Studio (SSMS) 2008, and often when I create a new table it doesn't appear on Intellisense, and after a little research I came across this website:

by Dan Jones.

And learned why this happens, and how to fix it.

First how to Fix it: There's two ways, the quicker and what you'll want to know if you are a shortcut Ace (or wannabe) is Ctrl + Shift + R , the other way is to go to the Menu in: 
Edit -> IntelliSense (last option) -> Refresh Local Cache 


Then Why it happens: SSMS reads all this info on what tables exist's and other things and cache it locally (it doesn't check every time), if you create a table or anyone creates a new table on the database SSMS won't update his local cache, so you have to do this manually, a good point of observation is that sometimes SSMS does update the cache and it depends on some actions, to learn how does the SSMS cache work you can observe when does it reads his cache.

Hope it helped,
Good Luck
The Developer Seer.