Ted さんのプロフィールTeds Spaceフォトブログリスト ツール ヘルプ

ブログ


11月19日

"Data Dude" Goes live

Cameron Skinner (Product Unit  Manager for Visual Studio Team System for Database Developers) announced at PASS that the "Data Dude" product will be live on November 30. Personally I think it's ready now, but there are apparently a couple of things that they want to bake into the final release. VSTSDD is a fantastic product, and frankly I see it as a must-have for any serious database development team. I got an honorable mention in Camerons blog here: http://blogs.msdn.com/camerons/archive/2006/11/16/nov-30th-is-the-date.aspx
 
 
11月15日

PASS Day 1

Today was the first offical day of the PASS conference. The keynote session by Paul Flessner was pretty good, but for the most part, there was no real earth-shattering information there. I did sit through a couple of sessions, BI200M which was a good overview session on Data Mining in Excel, and then AD311M, which was a great overview of the Visual Studio Team System for Database Developers..
 
Turns out that much of the content I've created for my presentation is very much of interest to the VSTSDD guys, so we'll see how many of them show up to my session tomorrow... Tonight is the big party at the "Experience", which is Paul Allens hobby..
 
Overall this seems to be a much larger conference than past years, and people seem genuinely excited.
11月13日

The PASS summit begins

Well, I made it here to Seattle. (What a long flight from home, COS to Dallas, then back to Seattle...I left my house at 4am Mountain and got to the hotel at 2PM Pacific)
 
Anyway, the conference starts for me with a meeting today to discuss Microsoft Learning and how things seem to have gone downhill recently. The perception from MSL is that things are not going bad, so we'll just see how it all turns out. I've promised some people to post a synopsis of what happens during the meeting, so stay tuned...
 
 
7月18日

Normalized Data is for Wimps!

Ok, I took a bit of liberty with the title...... I found this blog entry today as I was doing a bit of research on denormalization techniques for an article I'm writing. I found this to be humourous!
 
 
 
7月5日

SQL Everywhere Edition

There is a new "edition" of SQL Server that is nearing the release stage, which just might be the missing link in the whole SQL Server story. SQL Server Everywhere is essentially a port of the embedded SQLCE but setup as a desktop/mobile platform.
 
The team has just started a new blog, located here: http://blogs.msdn.com/sqlservereverywhere/default.aspx
 
 
7月3日

TempDB IO Requirements

I came across this article today in some stuff I was reading.. Not a bad KB/Q/Whatever...
 
 
Basically it talks about TempDB needing to be as fast and efficient as possible. This is especially true if you're using SQL Server for ECM...
6月23日

2006 PASS Summit

I got notified today that I will be delivering at least 1 session during this years Professional Association for SQL Server (PASS) Summit (http://www.sqlpass.org). I submitted 2 abstracts to PASS this year, 1 was accepted as a regular presentation, and 1 was accepted as an alternate presentation (In other words, if someone bails out, I would give the second presentation)
 
I have been involved with PASS (Not very active unfortunately, but you know how that goes) since it's inception, and it is definitely a worthwhile cause. I will be giving the following presentation:
 

AD-402: Test-Driven Database Development - Agile Methods for SQL Developers

11/16/2006 5:00 PM - 6:15 PM

 

The alternate possibility is:

2155: Implementing SOA - Effective use of SQL 2005 http endpoints

 

These presentations are an hour long with a 15 minute Q&A session.

 

If you are a database professional and haven't heard of PASS, or haven't attended the annual summit, you don't know what you are missing! Check it out this year, and see some people much, much better than I presenting topics ranging from SQL Server internals to the effective use of Data Mining algorithms!

 

 

5月24日

1TB per hour????!?!?!?!?!?!

Wow, this is just amazing..... A test (using an out of this world box mind you) performed by the SQLCAT team to load 1TB of data into SQL Server in less than an hour!
 
5月19日

Service Broker setup

I sat in on Tom Normans excellent session at the Rocky Mountain SQL Server user group last night (http://www.rockymountainsql.org) and during the session mentioned a tool that I had come across that makes setup of Service Broker easy..
 
 
Hope this helps some of you out...
 
 
5月18日

Colorado PASSCamp

So yesterday was the big Colorado PASSCamp (http://www.sqlserverbible.com/passcamp/index.htm) where I spoke on http Endpoints..
 
All in all a pretty good day, but the sessions were very rushed.
 
I'll be posting my sample code and slides (all 2 of them) to the website as soon as I figure out how to go about that...
 
To those that came out for the day, thanks!
 
 
5月15日

http endpoint Authentication

I have had the opportunity lately to do a lot of work with SQL http endpoints. (By the way, I am speaking on this topic at the Colorado PASS Code Camp this Wednesday -- For info check out: http://www.sqlserverbible.com/passcamp/index.htm)
 
One of the things that isn't terribly clear is how endpoint authentication is setup in SQL Server..
 
You basically have the following choices when configuring endpoint Authentication:
 
  • BASIC - Can ONLY be used with SSL, and should be reserved for the last resort
  • DIGEST - Basically a one-way MD5 hash that ONLY works for Domain Accounts and then ONLY if they are native Windows Server 2003. (Local accounts will not work)
  • NTLM - Good ole SSPI Challenge/Response. This is the default authentication method used for Integrated Security unless you've setup Kerberos to work with your SQL environment
  • Kerberos - Pretty much the standard Internet authentication method of choice these days, but not available by default for use with SQL Server endpoints.
  • Integrated - Integrated security will use either NTLM or Kerberos depending on how the client requests authentication, and depending on what is available.

If you want the most secure connection, you'll want to use Kerberos, but as noted above, it is not configured by default, and must be setup using tools from the Windows 2003 Support tools add-on. 

 

I'll write more in a follow on article on just exactly how to configure Kerberos and http endpoints.

 

5月5日

SQL Server History

Being a history geek, I found this blog entry of Euan Garden's very interesting:
 
5月2日

SQL Server Notification Services

So I've been spending a bit of time with SQL Notification Services lately, and had the occasion to develop a custom delivery protocol for notifications. At first this looked like it would be a relatively easy thing, just implement the interface and build whatever necessary communication 'stuff' into the code.. Didn't quite work out that way, but I finally found a good MSDN article on the subject. For those who might be looking at doing something similar, here's a link to the MSDN article:
 
 
 
4月30日

SQL Server 2005 Service Broker

So, for reasons that I don't really care to go into at the moment, I find myself chest-deep in the architecture/internals of SQL Server service broker. Holy cow is this thing cool!!! I'm not sure why I glossed over the functionality during all of the beta stuff I worked on..
 
For those that develop message-based applications using things like MSMQ, the Service Broker is a godsend. It may seem somewhat complicated to setup and work with, but here's a hint. Use the "Service Listing Manager" available at http://www.sqlservicebroker.com or, for a direct link, check out: http://blogs.msdn.com/remusrusanu/archive/2006/04/07/571066.aspx
 
 
11月22日

Angel Saenz-Badillos on MARS

Just when I thought I might be the only one who thought MARS would be misused and might not be a great idea, I come across this blog entry:
 
 
 
10月31日

Async Queries in .NET 2.0 / SQL2005

One of the new features of the .NET 2.0 Framework and the SQL Native Access Client (SNAC) is the way that parallel operations are handled. Previous versions of the Framework required those that would code Async operations to "cheat" and go "outside" of the data access APIs to achieve Async operations. (Most notably through the use of PInvoke to call unmanaged APIs)
 
The problem with this approach is that you end up simply spawning a thread that could easily block other background threads. (In ADO, when you execute a non-blocking query, what you're really doing is spawning a background thread which is then blocked until the database operation completes)
 
In SNAC/.NET 2.0, ADO.NET now provides an interface that is based entirely on true asyncronous network IO (non-blocking). This implementation is entirely "port-based", which means that there is never a blocked thread waiting for an IO operation to complete. (This sounds too hard to believe, but it is true - it's implemented through an O/S-managed signaling queue)
 
As discussed in an earlier entry, the Patterns and Practices group at Microsoft have given us a nice set of asyncronous patterns to use when building async applications. The SNAC data access APIs follow these patterns quite closely, and have provided a set of async methods for the normal "Execute"xx methods (Like ExecuteReader).. Each of these new methods return an IAsyncResult reference that can then be passed to the associated EndExecute methods, in the form of:
 
 
IAsyncResult aResult = command.BeginExecuteReader();
.. Do something
.. Do more things
SqlDataReader reader = command.EndExecuteReader(aResult);
 
Note that the data reader is actually created when you end the call... In this case, it's a simple inline invocation of the command. Normally you'd setup your async callbacks and allow your handler methods to actually read the result of the query... (This will be demonstrated in a future entry)
 
In order to utilize this stuff, you need to add a new keyword to your connection string "async=true" (which is actually a shortcut for "Asyncronous Processing = true")
 
(Take note that it is NOT a good idea to always include this keyword. If you include the keyword and then perform normal syncronous operations, you'll notice decreased performance as well as increased resource utilization)
 
In the next couple of entries I'll demonstrate how an application can be written to take advantage of these new features..
 
 
10月27日

It's OFFICIAL!

Microsoft announced today that SQL Server 2005 and Visual Studio 2005, along with .NET 2.0 were officially shipped. They are now available on the MSDN subscriber downloads page!
 
It's been a long wait, but finally here!
10月25日

SQL Server 2005 Native Web Services

Continuing my discussion on the new SQL 2005 features, I thought that I'd spend a bit of time discussing the new Native Web Services (http endpoints).
 
The first part of the discussion really needs to take place outside of the technology. For example, one of the questions that I hear on this all the time, is "how do you imagine that companies will use this feature"? This is a very good question, because (IMHO) Microsoft has blurred the lines as to what a "Database" server is with the release of 2005. I think the intent (again, I don't know this for sure, this is only an opinion) is to migrate SQL Server from a "Database Server" to an "Application Server". I think it's a logical progression, but it also opens up some territory debate. Traditional database servers are just that, the place where applications connect to get their data.. With SQL 2005 and Native Web Services, this doesn't really change at all, except for the fact that there is no middle tier "outside" of SQL Server that is hosting the web service. Instead of having your application talk to a web server that is hosting a web service, the app is now communicating directly to SQL Server.... (There's more to it than that, but it's a good place to start).
 
At any rate, lets get into the actual technical part of the discussion..
 
Creating a Native Web Service http endpoint in SQL Server 2005 involves the following:
 
  1. Identify exactly what you want to accomplish, and write stored procedures that accomplish that. (You don't have to have stored procs, but for the sake of simplicity, lets pretend that you do)
  2. Create an http endpoint, which defines a service and webmethod
  3. Create a client to consume the service you created in 2.

 

It sounds pretty simple, and in reality, it is.. (Of course there's a lot to think about in terms of exactly how the service is created and accessed, and there are a LOT of application and security implications to consider as well)

 

Here's an example of the TSQL code necessary to create an Endpoint:

 

CREATE endpoint RMSSug

state

= started

AS

http (

site

='localhost',

path = '/OrdersRange',

authentication

= ( integrated ),

ports

= ( clear )

)

FOR

SOAP (

webmethod

'SalesRate' (

name = 'AdventureWorks.dbo.uspOrdersRange',

schema = standard ),

wsdl

= default,

batches

= enabled,

database = 'AdventureWorks')

 

The above code snippet creates a service called RMSSug that is available on "localhost" accessible through the URL "http://localhost/OrdersRange", using integrated authentication and running on port 80. This Service has a method named "SalesRate", which executes a stored procedure in the AdventureWorks database called "uspOrdersRange", which takes no parameters and returns a recordset. (It also enables SQL Batches, which will be discussed in a future blog entry)

Once the service is created, you can create a client to access the web service. Here is an example of how you'd access the webmethod from a Windows Form application. Note that the type returned from the call to the webservice is of type object[] and must be CAST to an appropriate object (in my case a DataSet which is then bound to a DataGridView control on the form)

 

public

partial class frmWebService : Form

{

public frmWebService()

{

InitializeComponent();

}

private void frmWebService_Load(object sender, EventArgs e)

{

WebService.

RMSSug ws = new WebService.RMSSug();

ws.Credentials = System.Net.

CredentialCache.DefaultNetworkCredentials;

object[] results = ws.SalesRate();

DataSet ds1;

if (results[0].ToString() == "System.Data.DataSet")

{

ds1 = (System.Data.

DataSet)results[0];

DataTable dt = ds1.Tables[0];

dgrdResults.DataSource = ds1;

dgrdResults.DataMember = dt.TableName.ToString();

}

dgrdResults.Refresh();

}

}

 

In this case there are a couple of things to point out. First off, note the call to the WebService happens after I've attached the my credentials (See the line following the setup of the WebService).. Secondly, note that I am creating a DataSet by CASTing the first object returned to a DataSet..  Also note that I didn't  really need to explicitly define the DataTable, but wanted to do that to show how it's all put together.

 

10月24日

SQL Server 2005 New Features

I just finished (Ok, last week) a presentation on some of the new features of SQL Server 2005 and what it means to those who wish to upgrade their database server to 2005. This presentation was given to the Rocky Mountain SQL Server Users Group (see http://www.rockymountainsql.org)..
 
The highlights of the presentation are as follows:
 
  • MARS (Multiple Active Result Sets) - MARS is on by default when you install the SQL Native Client (SNAC), which also replaces your SQLOLEDB drivers.. You need to be careful with this feature, because it can lead to some very interesting bad programming practices.
  • Async Queries - Not a feature of SQL Server, but rather of the SNAC client... This is a very nice parallelization option that can really increase your performance if used correctly.
  • Query Notification - Using the Service Broker infrastructure, this is some pretty nice stuff, however the behind the scenes code generation that SQL Server goes through to implement this means that you really need to watch how you use this feature.
  • Snapshot Isolation - Be prepared to really watch TempDB when you use this feature...
  • http Endpoints - Some nice stuff can be accomplished here, but you need to be careful when returning a recordset, as the .NET framework 2.0 will return these as an object[] array, which means that you need to convert them to something useful within your code. You'll need to pay close attention to how you approach these.
  • Table Partitions - Implemented with some strange syntax, this feature can really help you in the event that you want to build some highly performant systems. Be careful though, because the overhead of letting SQL Server put your tables back together can get interesting.

All in all, I think the session went pretty well. (We spent just over 2 hours going over these issues) My colleagues who were present had some good critisism of the presentation, but I think overall the people who attended were pretty happy with it..

 

9月22日

SQL Server Performance

I've had several conversations over the last month with various colleagues on the topic of SQL Server performance.. It's interesting to note that while there is a TON of information available related to the subject, it seems that people still don't understand the subject all that well. It also interests me to note that many, many people still rely on the installation defaults for their production SQL servers..
 
I will be putting together some real information on this subject, and once we get over the hump that is the SQL Server 2005 launch, I will be presenting some sessions on this for the Rocky Mountain SQL Server users group. (See http://www.rockymountainsql.org)