An Introduction to Data Compression in SQL Server 2008
This is an excerpt from my free eBook, Bradās Sure Guide to SQL Server 2008.
There is one thing every DBA knows with certainty, and that is that databases grow with time. MDFs grow, backups grow, and it never stops. The more data we have, the more work SQL Server has to perform in order to deal with it all; whether itās executing a query on a table with 10 million rows, or backing up a 5 TB database. Whether we like it or not, we are fighting a losing battle, and DBAās canāt reverse the information explosion. Or can we?
While we canāt stop growth, SQL Server 2008 (Enterprise Edition only), gives us some new tools to help us better deal with all this data, and that is the promise of compression. Given the right circumstances, DBAs can use data compression to reduce the size of our MDFS, and backup compression can help us reduce the amount of space our backups take. Not only does compression reduce physical file sizes, it reduces disk I/O, which can greatly enhance the performance of many database applications, along with database backups.
When we discuss SQL Server compression, we need to think of it two different ways. First, there is data compression, which includes row-level and page-level compression that occurs within the MDF files of our databases. Second, there is backup compression, which occurs only when data is backed up. While both of these are forms of compression, they are architected differently. Because of this, it is important to treat them separately.
Data Compression comes in two different forms:
- Row-level Data Compression: Row-level data compression is essentially turning fixed length data types into variable length data types, freeing up empty space. It also has the ability to ignore zero and null values, saving additional space. In turn, more rows can fit into a single data page.
- Page-level Data Compression: Page-level data compression starts with row-level data compression, then adds two additional compression features: prefix and dictionary compression. We will take a look at what this means a little later in this chapter. As you can imagine, page-level compression offers increased data compression over row-level compression alone.
Backup Compression comes in a single form:
- Backup Compression: Backup compression does not use row-level or page-level data compression. Instead, backup compression occurs only at the time of a backup, and it uses its own proprietary compression technique. Backup compression can be used when using, or not using, data compression, although using backup compression on a database that is already compressed using data compression may not offer additional benefits.
In the next section, we will take a high-level overview of data compression, and then we will drill down into the detail of the different types of compression available with SQL Server 2008.
Data Compression OverviewData compression has been around for years. For example, who hasnāt zipped a file at some point in their career? While compression isnāt a new technology, itās new to SQL Server. Unlike zip compression, SQL Serverās data compression does not automatically compress an entire database; instead, data compression can only be used for these database objects:
- A table stored as a heap
- A table stored as a clustered index
- A non-clustered index
- An indexed view
- Partitioned tables and indexes
In other words, as the DBA, you must evaluate each of the above objects in your database, decide if you want to compress it, then decide whether you want to compress it using either row-level or page level compression. Once you have completed this evaluation, then you must turn on compression for that object. There is no single switch you can flip that will turn compression on or off for all the objects listed above, although you could write a Transact-SQL script to accomplish this task.
Fortunately, other than turning compression on or off for the above objects, you donāt have to do anything else to enable compression. You donāt have to re-architect your database or your application, as data compression is entirely handled under the covers by the SQL Server Storage Engine. When data is passed to the Storage Engine, it is compressed and stored in the designated compressed format (on disk and in the Buffer Cache). When the Storage Engine passes the information to another component of SQL Server, then the Storage Engine has to uncompress it. In
other words, every time data has to be passed to or from the Storage Engine, it has to be compressed or uncompressed. While this does take extra CPU overhead to accomplish, in many cases, the amount of disk I/O saved by compression more than makes up for the CPU costs, boosting the overall performance of SQL Server.
Hereās a simplified example. Letās say that we want to update a row in a table, and that the row we want to update is currently stored on disk in a table that is using row-level data compression. When we execute the UPDATE statement, the Relational Engine (Query Processor) parses, compiles, and optimizes the UPDATE statement, ready to execute it. Before the statement can be executed, the Relational Engine needs the row of data that is currently stored on disk in the compressed format,Ā so the Relational Engine requests the data by asking the Storage Engine to go get it. The Storage Engine (with the help of the SQLOS) goes and gets the compressed data from disk and brings it into the Buffer Cache, where the data continues to remain in its compressed format.
Once the data is in the Buffer Cache, the row is handed off to the Relational Engine from the Storage Engine. During this pass off, the compressed row is uncompressed and given to the Relational Engine to UPDATE. Once the row has been updated, it is then passed back to the Storage Engine, where is it again compressed and stored in the Buffer Cache. At some point, the row will be flushed to disk, where it is stored on disk in its compressed format.
Data compression offers many benefits. Besides the obvious one of reducing the amount of physical disk space required to store dataāand the disk I/O needed to write and read itāit also reduces the amount of Buffer Cache memory needed to store data in the Buffer Cache. This in turn allows more data to be stored in the Buffer Cache, reducing the need for SQL Server to access the disk to get data, as the data is now more likely to be in memory than disk, further reducing disk I/O.
Just as data compression offers benefits, so it has some disadvantages. Using compression uses up additional CPU cycles. If your server has plenty to spare, then you have no problem. But if your server is already experiencing a CPU bottleneck, then perhaps compression is better left turned off.
RowāLevel Data CompressionThe simplest method of data compression, row-level compression, works by:
- Reducing the amount of metadata used to store a row.
- Storing fixed length numeric data types as if they were variable-length data types. For example, if you store the value 1 in a bigint data type, storage will only take 1 byte, not 8 bytes, which the bigint data types normally takes.
- Storing CHAR data types as variable-length data types. For example, if you have a CHAR (100) data type, and only store 10 characters in it, blank characters are not stored, thus reducing the space needed to the store data.
- Not storing NULL or 0 values
Row-level data compression offers less compression than page-level data compression, but it also incurs less overhead, reducing the amount of CPU resources required to implement it.
Page Level Data CompressionPage-level data compression offers greater compression, but at the expense of greater CPU utilization. It works using these techniques:
- It starts out by using row-level data compression to get as many rows as it can on a single page.
- Next, prefix compression is run. Essentially, repeating patterns of data at the beginning of the values of a given column are removed and substituted with an abbreviated reference that is stored in the compression information (CI) structure that immediately follows the page header of a data page.
- And last, dictionary compression is used. Dictionary compression searches for repeated values anywhere on a page and stores them in the CI. One of the major differences between prefix and dictionary compression is that prefix compression is restricted to one column, while dictionary compression works anywhere on a data page.
The amount of compression provided by page-level data compression is highly dependent on the data stored in a table or index. If a lot of the data repeats itself, then compression is more efficient. If the data is more random, then little benefits can be gained using page-level compression.
Data Compression DemoData compression can be performed using either SQL Server Management Studio (SSMS) or by using Transact-SQL. For this demo, we will take a look at how you can compress a table that uses a clustered index, using SSMS.
Letās say that we want to compress the Sales.Customer table (which has a clustered index) in the AdventureWorks database. The first step is to right-click on the table in SSMS, select āStorage,ā and then select āManage Compression.ā
Ā
Figure 1: SSMS can be used to manage compression.
This brings up the Data Compression Wizard, displayed below.
Figure 2: The Data Compression Wizard, or Transact-SQL commands, can be used to manage data compression.
After clicking āNext,ā the wizard displays the following screen, which allows you not only to select the compression type, but it also allows you to calculate how much space you will save once compression has been turned on.
Figure 3: Use this screen to select the compression type, and to calculate how much space will be saved.
First, letās see how much space we will save if we use row-level compression on this table. To find out, click on the drop-down box below āCompression Type,ā select āRow,ā and then click āCalculate.ā
Figure 4: For this table, row-level compression doesnāt offer much compression.
After clicking āCalculate,ā the wizard runs and calculates how much space is currently being used, and how much space would be used after row-level compression. As we can see, very little space will be saved, about 1.6%.
Now, letās see how much compression savings page-level compression offers us for this particular table. Again, I go to the drop-down menu under āCompression Type,ā select āPage,ā then press āCalculate.ā
Ā
Figure 5: Page-level compression is higher than row-level compression.
After pressing āCalculate,ā we see that compression has improved greatly, now saving about 20% space. At this point, if you should decide to turn on page-level compression for this table, click on the āNextā button.
Figure 6: The wizard allows you several options in which to turn on compression.
At the above screen, you can choose to perform the compression now (not a good idea during busy production times because the initial compression process can be very CPU and disk I/O intensive), schedule it to run later, or just to script the Transact-SQL code so you can run it at your convenience.
Once you have compressed this table (a clustered index), keep in mind that any non-clustered indexes that this table may have are not automatically compressed for you. Remember, compression is based on a per object basis. If you want to compress the non-clustered indexes for this table, you will have to compress each one, one at a time.
While this wizard helps you to see how much compression either method offers, it does not suggest which compression method should be used, nor does it recommend whether compression should be used at all for this object. As the DBA, it will be your job to evaluate each compressible object to determine if it should have compression enabled or not. In other words, you must decide if the benefits of compression outweigh the negatives.
Backup CompressionFor years, there have been third-party programs that allow you to compress and speed up SQL Server backups. In most regards, the backup compression included with the Enterprise Edition of SQL Server is very plain vanilla. In fact, if you already are using a third-party backup program, I would suggest you continue using it, because SQL Server 2008 backup compression offers fewer features. In fact, the only option SQL Server 2008 backup compression offers you is to turn it off or on. Thatās it.
SQL Server 2008 backup compression, like the third-party add-ons, compresses backups, which not only saves backup space, but it can substantially reduce backup times. Unlike data compression, there is very little downside to using backup compression, other than the additional CPU resources required to perform the compression (or decompression during a restore). Assuming that you perform backups during slower times of the day, the additional CPU resources used will not be noticeable.
The time and space savings offered by backup compression depends on the data in your database. If you are heavily using data compression in your databases, or are using Transparent Data Encryption, then using backup compression probably wonāt offer you many benefits, as already compressed data, or encrypted data, is not very compressible.
Letās take a brief look at how you turn on SQL Server 2008 backup compression. While our example will use SSMS, you can use Transact-SQL to perform the same task. To backup AdventureWorks, right-click on the database in SSMS, select āTasks,ā and then select āBack Up,ā and the backup dialog box appears.
Figure 7: As with any backup, you can use the backup dialog box to make your selections.
Once you have selected your backup options, next click on āOptions,ā and the following screen appears.
Figure 8: Backup compression options are limited.
At the top of figure 8 are the standard backup options, while at the bottom of the screen you see the options for backup compression. Notice that you only have three choices.
The first option, āUse the default server settingsā tells the backup to use the serverās default backup compression setting. In SQL Server 2008, there is a new sp_configure option called ābackup compression default.ā By default, it is set to have backup compression off. If you want, you can set this option so that backup compression is turned on by default. So if you choose the āUse the default server settingsā option above, then whatever option is set for the ābackup compression defaultā will be used for the backup.
The āCompress Backupā option turns backup compression on, and the āDo not compress backupā option turns it off. Both of these options override the ābackup compress defaultā server setting, whatever it happens to be.
Once you have chosen your backup compression method, you proceed with the backup just like any other SQL Server backup.
If you need to restore a compressed backup, you donāt have to do anything special, it will uncompress itself automatically. Although you can only compress backups using the Enterprise Edition of SQL Server 2008, you can restore a compressed backup to any edition of SQL Server 2008. On the other hand, you cannot restore a compressed SQL Server 2008 backup to any previous version of SQL Server.
SummaryIn this article, we have learned about the two forms of data compression, and about backup compression. While data compression might seem like a seductive new feature of SQL Server, I highly recommend that it is only used by experienced DBAs. While it offers lots of promise for increased performance, it can just as easily cause performance problems if misused. Backup compression, on the other hand, can be used by DBAs of all skill levels.
Taking Advantage of SQL Server Tools
Reprinted from my editorial in Database Weekly.
An important question I think you should be asking yourself, when it comes to your professional development, is "Are You Taking Full Advantage of the SQL Server Tools Available to You?" I think it’s important enough that, when I make presentations at conferences or user groups, I often add this quote to one of my slides:
"One of the differences between an average DBA and an exceptional DBA is that the exceptional DBA thoroughly understands how to use the available tools to their fullest potential."
I started adding this quote after I discovered just how many DBAs don’t seem to be fully familiar with how SQL Server tools can help them perform their jobs better. How did I find this out? I asked. During many of my presentations, I ask for a show of hands of who feels they are experts at using these tools, and I am always surprised to see how few hands are raised. While clearly not perfect, SQL Server does come with a wide variety of tools which I think all DBAs need to take the time to master, even if the learning curve for mastering some of them is high. Specifically, I recommend DBAs become skilled with the following tools:
- SQL Server Management Studio (Sure it seems obvious, but there’s a lot of hidden power included in SSMS that many DBAs aren’t familiar with)
- SSMS Query Editor (especially for analyzing execution plans)
- Profiler
- Performance Monitor
- SQL Server Configuration Manager
- Database Engine Tuning Advisor
- DMVs/DMFs
- SQLCMD
- Dedicated Administrator Connection (DAC)
- SQL Server Business Intelligence Development Studio
Some of the above tools are easy to learn, while others are tough to master; equally, some of these tools will be used on a daily basis, while others might only be used occasionally. In any case, I challenge all DBAs to master these tools if they want to become as successful as they possibly can be.
Do you agree that DBAs should master all of the tools I’ve mentioned, or am I asking too much? And which tools have I left out?
Notes from SQLSaturday #33
I did the relatively quick flight to Charlotte on Friday afternoon, arriving just before 2 pm, grabbed lunch to go from a bbq place in the food court and waited for the hotel shuttle. About a 20 minute wait, not much more than the time it would have taken to go through the rental car process. Off to the Hampton Inn, which was right off the interstate, and in an area with more hotels in one area than almost any place Iāve seenā¦except Orlando!
Took time to check email, then headed off to the nearby Hyatt where I was to meet the other speakers for the trip to the speaker party. I was really early and had time to chat with Denny Cherry about his recent SAN training (good stuff), and then finally we departed for the party about 5:15 along with his wife ā turns out all the over speakers went direct or had not arrived yet, so there was plenty of room.
Next stop was the SQLSentry office and most all the speakers were there, so we spent at least an hour just chatting before going to the actual party. Great dinner, I was between Allen White and Geoff Hiten, and we had a lot of fun. Finally finished up about 10 pm and I rode back with Allen, we usually only see each other once a year so we enjoyed the chance to talk in person more than usual!
Saturday morning I was up early and took the hotel shuttle over to the Microsoft office (about 1/2 mile) and only a few people there when I arrived about 7:10 or so. They finally let us in and it was just a bit disorganized, sponsors not sure where to set up, but that worked itself out and by 7:40 all was flowing smoothly. Blythe Morrow was there so I sat with her for a while to talk about the logistics phase of the event.
The keynote was scheduled for 8:15, but with a steady stream of attendees still arriving we delayed the start, probably to about 8:40. As I mentioned last week the keynote was largely unrehearsed, starting off with an intro from Peter Shire (SQL Sentry/Charlotte Chapter Leader/SQLSaturday leader), then Steve Jones with a quick story about the formation of the SQLSaturday concept (he didnāt think it would work!), and then I ran through six or seven slides, talking about how and why we started and our early goals, some lessons learned, and where we hope it goes under the guidance of PASS. Rushabh Mehta finished up with just a few quick words, focusing on the message that the main goal for PASS right now was to keep things running and not to break anything. We finished up with a ceremonial turning over of the key from Steve & I to Rushabh, a styrofoam key about 3 feet long. Good theater I guess!
My presentation wasnāt until 10:15, so I wandered some, shared some more thoughts with Blythe, and had some more coffee. Finally found my room, signs were mildly confusing, track 5 was in room 4. One interesting part of the day was that because this is a large MS office, they had a lot of people on hand to open what would be otherwise locked doors and make sure attendees stayed in designated areas. Took a lot of people ā Iād guess 10-15 between MS and their on site security ā kudos to them for providing that level of support.
I did my presentation without any problems to a crowd of about 25, good questions, and from the brief survey I did all were having a good day. For most it was their first SQLSaturday and it seemed to be meeting or exceeding their expectations ā always good!
Then back over to the cafeteria area, chatted with David Waugh from Confio, then spent some time with Kevin Kline, that morphed into lunch (sandwiches and chips), and then a couple hours with Blythe where others came and went (Patrick Leblanc, Jessica Moss, Steve Jones, etc), mostly talking about SQLSaturday.
I left a little earlier than planned, around 4 pm, riding to the airport with Steve and lucking out to get an earlier flight than the original 8 pm, leaving us just enough time for a quick dinner before the flights left.
Attendance was somewhere around 220 and it looked to me like all went well. Congrats to the SQLSaturday #33 team for a great event!
Itās Like the MVP Summit
However this weekend in Charlotte, for SQL Saturday #33, it appears that itās like a mini-summit, and thanks to Peter Shire and SQL Sentry for assembling an amazing lineup. I am sure I am forgetting someone, but look at this lineup:
- Andy Warren
- Andy Leonard
- Jessica Moss
- Kevin Kline
- Rushabh Mehta
- Wayne Snyder
- Allen White (the roommate I missed at the Summit)
- Andrew Kelley
- Aaron Bertrand
- Tim Ford
- Denny Cherry
- Geoff Hiten
- Ashton Hobbs
- Alejandro Mesa
- Mike Walsh
- Patrick LeBlanc
- Kendal van Dyke
- and more
I think Iām the weakest link of this bunch. This was one of the best lineups Iāve seen at an event, and incredible for a free event. SQL Pros in Charlotte, you should consider yourselves lucky to have the chance to attend this amazing day of training for free.
"InterXpress for Firebird" 2.3.0 released
"InterXpress for Firebird" is our driver that supports Borlands dbExpress technology! Today we release version 2.3.0 of our driver, this version includes support for Delphi 2010.
You can download a copy of it http://www.upscene.com .
Currently supported are Delphi 6, Delphi 7, BDS 2006, Delphi 2007, RAD Studio/Delphi 2009/2010, Kylix 3 and C++Builder 6.
What's fixed, new and changed? Check it out here:
http://customer.upscene.com/script/mantisgateway.exe/fixed?fixedin=2.3.0&projectid=19
http://customer.upscene.com/script/mantisgateway.exe/fixed?fixedin=2.2.0&projectid=19
http://customer.upscene.com/script/mantisgateway.exe/fixed?fixedin=2.1.0&projectid=19
With InterXpress for Firebird you have guaranteed access to Firebird and all its features. The driver comes in two versions:
- Desktop Edition
- Server Edition
All versions come with a full year of support and maintenance updates. The support period can be extended at a reduced price after the first year.
Desktop Edition
The Desktop Edition is aimed at deploying and developing applications that use a localhost or local protocol connection and accepts up to four connections per client process. The license includes full rights to deploy the driver at any number of sites for any number of workstations.
Server Edition
The Server Edition is aimed at deploying and developing applications that require a remote connection (client/server) and allows unlimited connections from a single client process. The license includes unlimited rights to deploy the driver at any number of sites for any number of workstations and/or servers.
Geek City: More About Nonclustered Index Keys
Opening Keynote ā SQL Saturday #33
I didnāt quite read this, but this was the written part of what I have as the opening keynote for SQL Saturday #33.
Welcome to SQL Saturday #33 here in Charlotte.
My business partner, Andy Warren, has had a ton of ideas over the years. He likes to remind me that they might not all be good ideas, but thereās no shortage of them. A few of them stand out, like his idea for the Best of SQLServerCentral books. I was driving home in a rare Denver rainstorm one night when he told me we should republish the best articles from the year in a book format. I had to pull over and debate it since I was sure no one would want a copy, but I was proved wrong. That series has been very popular over the years and we are on our eighth volume this year. SQL Saturday was another one of idea I didnāt believe in at first
When we started our training business, SQL Share, we were looking for ways to market the business. We tried some of the traditional methods of advertising, and had even considered purchasing a booth at the PASS Summit or TechEd. Those were expensive, and we were not sure they would be good investments. In our market research, which is really just a fancy term for us talking to regular people like all of you, we realized that the vast majority of IT professionals never attend conferences and other large events. Lots of people rarely go, usually once or twice in their careers, and a very lucky, select few go quite often.
When Andy approached me with the idea of running free events to get more training out to those that canāt go to conferences, I was skeptical. I wasnāt sure that it would even run, much less help us market our business, but Andy had proven me wrong before and both Brian Knight and I lent our support.
And money.
Over many phone calls, we worked on the idea and eventually SQL Saturday #1 in Orlando was held three years ago. Since then dozens of events have been held all over the country, and while they havenāt necessarily resulted in a lot of monetary profit, they have brought us a lot of satisfaction, and Iām proud to be associated with them. Iāve helped in a small way, but most of the credit has to go to Andy Warren.
SQL Saturday Schedule Update
In January, I blogged about the upcoming SQL Saturdays for 2010, and since then, many more events have been scheduled, so I thought I would do a quick update. I wish I could attend more of the events, but so far, I am scheduled to speak at:Ā
SQLSaturday #31 – Chicago 2010Ā
While I have been to the Chicago airport many times, I have never spoken in Chicago before. Besides speaking at the SQL Saturday event, I will also be speaking to the Chicago SQL Server users group on the Thursday before SQL Saturday.Ā
SQLSaturday #22 – Pensacola 2010Ā
I attended thisĀ inaugural event last year, and I am looking forward to attending again. This year, there will be about 40 different sessions, covering SQL Server, .NET, and SharePoint.Ā
SQLSaturday #28 – Baton Rouge 2010Ā
This will be my first time in Baton Rouge, and only my second time ever visiting Louisiana, so I look forward to seeing a new part of the country.Ā
As of today, the following SQL Saturday events are scheduled:Ā
Mar 6, 2010
SQLSaturday #33 – Charlotte 2010Ā
Mar 13, 2010
SQLSaturday #37 – Philadelphia 2010Ā
Mar 27, 2010
SQLSaturday #29 – Birmingham 2010Ā
Apr 10, 2010
SQLSaturday #30 – Richmond 2010Ā
Apr 17, 2010
SQLSaturday #31 – Chicago 2010Ā
Apr 24, 2010
SQLSaturday #39 – New York City 2010Ā
Apr 24, 2010
SQLSaturday #41 – Atlanta 2010Ā
Apr 24, 2010
SQLSaturday #44 – Huntington Beach 2010Ā
May 1, 2010
SQLSaturday #36 – Wheeling 2010Ā
May 8, 2010
SQLSaturday #38 – Jacksonville 2010Ā
May 22, 2010
SQLSaturday #35 – Dallas 2010Ā
May 22, 2010
SQLSaturday #27 – Portland 2010Ā
Jun 5, 2010
SQLSaturday #22 – Pensacola 2010Ā
Jun 12, 2010
SQLSaturday #43 – Redmond 2010Ā
Jun 26, 2010
SQLSaturday #42 – Columbus 2010Ā
Jul 31, 2010
SQLSaturday #40 – South Florida 2010Ā
Aug 14, 2010
SQLSaturday #28 – Baton Rouge 2010Ā
Ā
Going to Charlotte for SQLSaturday #33
Iām flying up Friday afternoon for SQLSaturday #33. Looking forward to the trip, Charlotte is a great area and I know a lot of the speakers presenting this time, so the Friday night get together should be a lot of fun. This will be more of a working trip than usual, Blythe Morrow from PASS HQ is also attending and Iāll be spending most of Fri and Sat trying to transfer as much knowledge as I can about how and why we do things at SQLSaturday, alternatives, pain points, and where we can do better.
Iām also doing part of the keynote with Steve Jones and Rushabh Mehta, talking about the history of SQLSaturday so far and where I hope it goes over the next couple years. Not often I do a keynote and this isnāt a presentation Iāll be able to practice much, but thatās offset by the small amount of time ā about 10 minutes ā and it being a topic I know pretty well, so weāll hope it works out.
PASS Update #24
Time to update you again on all things PASS. First, I havenāt made a lot of progress on the speaker bureau. Rushabh supports the plan to build what we need and Iāve sent an outline to the Board for comment (one received so far), and Iām waiting on results of the survey that went out to Chapters to make sure weāre getting input from our community leaders. Then we have to figure out who will do the actual work ā internal, external, volunteers, all of the above. Have to admit Iām tempted to do just build v1 myself, if only to feel like Iāve accomplished something!
Thought about that some more after the first draft, and it points out to me visibly why we (PASS) often make such slow progress. I get busy at a work and lose a few days, email Rushabh (or whoever) and the same thing there. Add a request for something to HQ and maybe it adds a day or two. Then a con call to make sure we have shared understanding. And then trying to get some sort of general buy in from external stakeholders (and/or those interested) and you’ve got a recipe for slow. Same thing happens to most businesses. How do you make sure time and money is spent wisely, but still go fast? I don’t have a magic answer to that, but I think one way is to compress the decision cycle, which means putting the idea people in the same room for with the decision people to nail down a plan, and time boxing the next steps. Not without its own risks, but given a choice of failing quick or slow, I’ll go for quick.
How do we do that? Say another board member poses a plan that will cost $50k. Do I accept that we had the right people involved and say that worst case is we waste $50k? Or make them go back through more diligence?
Not fully though through, but I like the idea of grants. Allocate money, put the project up in board strokes, and take the chance that someone can make it happen. As I said, definitely needs more thought.
If you recall from last time I mentioned a proposal to hire more staff. This went up for a vote and it passed, a budget exception of about $120,000, or to put it different terms, we have to pull in another 175 Summit attendees to pay for it. I voted against it, for a few reasons:
- We pared our budget to the bone to get through the year, taking away almost every bit of discretionary spending. I think we could have considered putting some of that money back before hiring staff.
- I donāt feel like weāve done a good enough analysis on how we spend our time. As Iāve written previously, efficiency is complex. The question I donāt think we answered was whether we (the Board) feel like weāre spending an appropriate amount of time in certain areas. I asked this back in January, and essentially got no answer because we donāt have the data.
Voting against it was not easy. We need full time staff to get things done, and I want our staff to work reasonable hours. We need to add support for things like SQLSaturday. Part of the increase is for a second IT person. Weāve never been good at technology, and if we can use the second person to implement our own Summit speaker management system, it should be self funding. That makes sense to go that far, but Iām far from convinced that we should have someone on permanent staff as a developer, mainly because we donāt have someone with IT management skills to manage them. In the end I voted no because it felt like a rushed decision.
For those of you that are considering running for the Board, this is a good example – consider how you want to participate and how well you take losing an argument!
Changing topics, we also voted on what to do about moving the Summit to the East Coast. The results of the survey we went out last month were interesting, and showed a mix of responses ā obviously everyone would prefer it close to them, but there was a definite interest in moving the event around. Iāve asked for the data to be posted on sqlpass.org, so far we havenāt managed that, hopefully soon. I also requested that we release the full detail records scrubbed of identifying data, but it was determined that doing so was too complicated! I donāt know that we would have arrived at a different decision, but given that we are data people, I thought it would be nice to get some smart people looking at it, and maybe see if there were interesting follow up questions to be asked.
Going in to the call I really expected to move the Summit back to the East Coast every 2nd or 3rd year. Part of it was what model did we want to be? One model was Oracle World, held every year in San Franscisco. My preferred model is the Super Bowl, where we move from city to city each year, but with a bias towards Seattle to acknowledge our close ties with Microsoft. For those of you who have been with PASS for a while, we used to move around quite a bit. Chicago, Denver, Orlando, and Dallas, and I really liked that model.
Note: I’ve revised this post to remove the results of the vote.Ā By conventionĀ PASS announces the location of the next Summit during the current year Summit.
Changing topics once more, Iāve been working on the transfer of SQLSaturday to PASS. Itās gone slower than I hoped on the technology side, but right now we should be done by March 15th. Blythe is really taking ownership of the community side, including heading to Charlotte for the upcoming SQLSaturday there so she can watch, and weāll be putting a lot of time into transferring knowledge. Sheās been joining me on the āget acquaintedā calls we do with those interested in hosting an event and thatās been an effective way to transfer knowledge too.
The biggest hurdle weāve hit so far is handling money ā or how to do it that is. In the past we collected money on behalf of events at no charge, and then sent them the money when requested. Good stuff, except sending the money required a social security number or tax id, making it a taxable event. We advised event leaders to hold back some of the money to cover the tax burden. Not a great system, but at least we had the ability to take credit card payments and hold cash securely until needed.
PASS is a not for profit, we do an annual audit, and one of the things that didnāt get adequate attention during the diligence was the money side of things. I didnāt see it as risk because our CPA was fine with our process, but itās taking some time to iron out on the PASS side. Not cause for panic, but itās definitely been painful to get it figured out. I expect that to be resolved shortly, and hoping we end up with a better solution than we had before.
While I didnāt expect that particular problem, I always expected pain at some point, thatās the nature of any acquisition (even when you get it for free!). I feel like so far weāre doing an ok job of moving things forward and I still remain confident that we can move SQLSaturday forward in a way completely inline with itās grass roots philosophy.
Next time I’ll take about the upcoming election!
Schedule for SQLSaturday #33
Self Promotion & Self Marketing
The title of this post illustrates my own ambiguity on the topic. Itās fair and necessary to let others know about your accomplishments (marketing), but itās easy to descend into āhey look at meā (promotion). Not sure how well I can show the distinction. Self marketing is an essential skill though, and it is worth the effort to build a technique that fits you.
The starting point for this is that many good employees feel under appreciated, under paid, and are often passed over for interesting assignments and promotions. Why? Their boss just doesnāt know what they have done for the company.
How can that be you ask?
Most managers are busy, and they have an expectation that when a task is assigned it will get done. They may see you working late or through lunch (and appreciate it), but even with a small team itās easy to lose track of who is working hard and effectively versus those that just work hard, and then again those that just spend a lot of hours at the office.
Now you may think that isnāt fair. Perhaps not, but it is the reality. That leaves you with a fork in the road:
- Work hard and do things that need to be done without being asked, and hope someone notices
- Do the above, but make sure you track it and share it with your manager at some point.
Assuming that you are taking the latter option, how do you do it? Iāve seen three main strategies:
- Log your accomplishments, times you came in on a weekend, extra hours, great ideas, etc, and share them at review time (note that sounds a lot like a private blog!). Sound technique, the only downside is that you only get to alter perception once a year.
- Do somewhat the same, but in less formal fashion ā perhaps dropping in to see the boss once a week to ācheck-inā and casually mention any extra effort. This often goes along the lines of āI had a heckuva time getting up Saturday morning for stuff with the kids after leaving here at 2 amā. Or you can be more direct, as fits you.
- Letting everyone know that you did something extra ā lunch with colleagues, team meetings, chance encounters with others
You can combine those as you want, and many use all three. You might see those as pushy, or even devious, but it all comes down to how you deliver it AND how itās perceived. This often depends on the person youāre working for ā do they get and appreciate the value of you sharing your accomplishments, or do they see it as sucking up or worse?
As a manager, I like to hear about times when an employee has done something well, because I donāt always know and I want to make sure to keep the rankings of who delivers up to date in my head. At the same time, as soon as it starts to feel like they over emphasizing every line of code they did, I start to apply a filter, which comes close to zeroing out the value. The same if I see it as taking credit for work or ideas that werenāt really theirs (and that does happen ā especially if the āother guyā isnāt speaking up).
As a manager, I want the insight, within these rules:
- Never exaggerate
- If all I hear is good stuff, then youāve moved into self serving. Share some missteps too.
- Never take credit for work done by others
- Plus points for making sure I know about good work done by someone else on the team
- Donāt try to manipulate me, but do learn what I value and what I donāt
Maybe you start to see that how you deliver is as important as what you deliver, and for those that are just giving up on the idea that the boss is all knowing, the first attempts are usually painful and awkward. Remember that itās to be expected. Just keep working on it until you find a method that works (and remember to adjust when you get a new boss).
Itās amazing to me how much difference being good at this can make. Many years ago I worked for a company with many offices, most staffed about the same and doing about the same work for their area. There was a manager at a nearby office that was seen as being very, very good, but I had seen him and my own manager work, and in my view my boss was as good, if not better. Why was he perceived as so much better, when in fact the tasks were either done or not done? It came down to two things:
- He was co-located with the next level manager, giving him plenty of āhallway opportunitiesā to share that he had just completed a task a couple days ahead of schedule, etc, etc
- He made it a point to make sure people knew when he did anything ahead of schedule
Said differently, he was the only one talking, so the assumption was that no one else was going anything exciting or trying to excel. That was far from the case, but most of those others dismissed it as āpoliticsā ā and that was my own view as well. Looking back now I see that he was just playing the game better than the rest (which is mildly negative, but it is a competition), and that the people he worked for werenāt very good managers or they would have done more to compensate.
Some managers will work hard at seeing accomplishments (good ones), and many think (different ones) that if you donāt get it and do your own marketing that you truly donāt get it, and that in itself moves you down the list of good to great employees.
Changing focus some, as a reader/consumer of content I tend to look at it exactly the same way as I would as a manager. If every post and tweet is a ālook what I didā, I will probably filter you out. On the other hand, if you take time to post about stuff that is just interesting and not about you, I read that and appreciate your effort (and by implication, your knowledge and skill that let you write it) and then Iāll also read with interest/patience about things you do that you want to share.
For example, yesterday I posted some notes from the South Florida Code Camp. Part of that was to share that I did a couple presentations ā demonstrating competence and participation. But instead of just writing that, I tried to share more thoughts about the trip. Arguably that just means more about me, but for me blogging is first person. I could write it as more of a report, but I think that is less interesting to most people, and definitely less fun to write. Think about that for a minute ā was it useful, did you find it interesting to hear about the trip, or did it just smack of shameless self promotion?
I prefer a low key approach, others tend to more aggressive (blatant?), and itās interesting to me that people often accept a style of marketing from some people that they wouldnāt from others, in effect adjusting for the personality of the one doing the messaging. I canāt say that one is right and the other is wrong, but can say that the more conservative strategy is to err on the side of caution. Hard to undo the damage if you cross that line (which you canāt see).
Have you found a way to effectively market yourself at work?Ā Ā Or seen a technique that really worked well? Or a technique that just seemed over the top?
Heading to Charlotte
I think Iāll forever associate Charlotte, NC with my middle son. We were heading back to Denver from Virginia Beach a few years ago after a vacation. Our flight was scheduled to go through Charlotte before heading to Denver. My daughter and my middle son were sitting with me as the plane sped down the runway in Virginia Beach when about halfway down the pilot slammed on the brakes. If youāve never experienced that, itās very unnerving. My daughter gripped my arm as my son looked up and said
āAre we in Charlotte?ā
Totally serious since heād been engrossed in a book. My daughter, who looked like she might cry up to this point started laughing. She told him we hadnāt even taken off.
There was a problem with the plane, and we ended up spending another night with grandma, which pleased her and the kids. Everything was fine, but it is one of those events that sticks with you.
This morning Iām heading to Charlotte, no kids, to SQL Saturday #33, to speak and see some friends. Iāll be giving my Modern Resume presentation and also part of the keynote presentation. Andy Warren and I, along with PASS President Rushabh Mehta, will be up to talk a little about the history of SQL Saturday and itās current transition to PASS.
It should be a great event, and the list of speakers is impressive. Kevin Kline and Joe Webb from TN, Denny Cherry from CA, Jessica Moss and Andy Leonard from VA, Aaron Bertrand from RI, Patrick LeBlanc from LA make this one of the more impressive events outside of the national conferences.
Please Provide PASS with Feedback on its Speakerās Resource Pages
The PASS Program Committee is gearing up for the 2010 PASS Community Summit āCall for Speakersā, and it would like your feedback on its Speakerās Resource and its Online Speaker Resources web pages. (Yes, I know the names of these pages are confusing, and this is something that will be fixed). Iām a member of the PASS Program Committee, and participate in the role of Speaker Management, so I have been asked to be the focal point for collecting this feedback. Once I get your feedback, I will then summarize and present it to the committee.
Please offer any feedback you would like on the two web pages in question. Below, I have suggested some areas where we would specifically like feedback, but feel free to offer any feedback that is related to the PASS āCall for Speakersā.
Below are the areas where we would like your feedback.
1) PASS offers a Speakerās Resource Page that provides information for PASS speakers about the āCall for Speakersā process, and other related information. Currently, it has not been updated for 2010, but if you could review this page, and tell us what you think about it, it would be very helpful. Specifically, tell us what is good about the existing content, what needs to be improved with the existing content, and what content is missing. This web page can be accessed without having to log onto the PASS website.
2) PASS also offers the Online Speaker Resources web page. This page is very different from the Speakerās Resource Page web page in that it only lists online resources that can be helpful for any speaker, whether they are for speaking at the PASS Community Summit, or speaking at a local users group. We would like your feedback on the existing resources on this page, plus if you have any suggestions for additional speaking resources, please tell us. Because the Online Speaker Resources web page is so closely related to the Speakerās Resource Page, we also want your feedback on whether or not you think these two pages should be combined, or if they should remain separate. To view this web page, you have to log onto the PASS website.
Because this blog in syndicated to more than one website, please post all of your comments at my blog, www.bradmcgehee.com, which will make it much easier for me to collect and summarize all of the feedback. While comments have to be approved before they are published (to prevent spam), they will all be approved and published as soon as possible. If you want to give your real name, thatās great, but you can also provide your feedback anonymously. If you have any questions, please post them along with your feedback.
So whether you have been a past PASS Community Summit speaker, or you are thinking about becoming a speaker, we would like to hear from you.
SQL Server 2008 R2 - Application and Multiserver Management Learning Materials
Music before bells and whistles
Google, typography, and cognitive fluency for persuasion
How Not to Write a Resume Cover Letter
Although I am not currently a hiring manager, I occasionally receive unsolicited resumes from people looking for work. I just received a resume attached to an e-mail with the following cover letter. I have masked some of the content so that it is not personally identifiable, but otherwise, I have not made any changes to spelling, punctuation, capitalization, grammar, or content.
Hello friends,
I’m presently working at a Company named “xxxxxxxxxx” in xxxxxxxxx, xx. Ever since I started, it’s been 12 hour days, crisis upon crisis, with no end in sight. I don’t mind doing this in a pinch for a week or so, but I have obligations and responsibilities outside of work which have largely been ignored, and are now showing signs ofĀ that.
I’m trying to make this work, but the pressure to produce is over the top. Every hour some one comes in and asks me “Is it done yet?” and reminds me that it has to get out yesterday. Usuallly, I am very able to work very well under pressure, but I have not been able to even get familiar with the databases, reports etc to discover how it’s done, so that I can research the problem. Most of these reports have band-aid approaches because everything has been in crisis. I am the type of person that needs some quiet time while working under a crisis so I can logically follow it through. So far, I have not able to achieve that balance here.
Please note that I HAVE NOT put my resume out on Monster or DICE, yet. I am trying to give this company all the leeway I can. I am just emailing you because you are a trusted source and I have worked with you in the past. Please keep my confidentiality. I realize that times are tough, but I am enclosing my resume, in the hopes that if you see something that fits my skills, that you will let me know about it. Right now, my annual salary is $xx,xxx per year.Ā I cannot go below that.
Enclosed, please find my resume.
Thanks
xxxxxxxxx
Ā I thoroughly understand what the author of this cover letter is saying, and if I was placed in the same situation, I would also be looking for another job. On the other hand, I would take a different approach to writing the above cover letter.
Here is my advice on how this cover letter should be changed.
–Although not shown in the above sample, this e-mail was sent to a number of different people at the same time, and all these peopleās e-mail addresses were listed in the To: section of the e-mail header. My advice, donāt include the names of other recipients of your e-mail in the CC portion of your e-mail. If you need to send an e-mail to multiple people, at least put the e-mail addresses in the BCC portion of the e-mail, so that the privacy of the other people is maintained.
–The first thing I read in the cover letter is āHello friendsā, which is another clear indication that this e-mail is going out to multiple people at the same time. My advice, send individualized e-mails to those people who you are contacting about potential work opportunities. Nobody likes to feel that they are the recipient of a blanket e-mail, especially if the sender is asking for your help.
–Another thing I noticed right away is the careless proofreading of the cover letter, as there are a number of minor mistakes. My advice, if you want to make a good first impression, your cover letter should be carefully proofread, and obvious mistakes corrected. I am not expecting perfection, as we all make mistakes, but there are more mistakes in this e-mail than I would expect to find in a cover letter.
–One of the first things the author does in the e-mail is to name the company they are working for, and then criticizing it. I am sure that what the author is saying about the company is true, but including a ārantā against your current employer is not the best way to impress a potential employer. My advice, donāt attack your current employer, especially by name, when looking for a new job.
–Along these same lines, the author is essentially whining in the e-mail. While the author has every right to complain about the company they work for, whining should be directed to friends and family who love and care about them. My advice, never whine in a cover letter. This is a clear indication to potential employers that the applicant may also become a whiner should they be hired, and why would an employer want to hire a known public whiner?
–The last paragraph confuses me. When I read the letter for the first time, my first impression was that the author was submitting a resume to me for consideration of any potential jobs I might have available. If this was the case, and I was a hiring manager, I would have deleted the e-mail immediately without a second thought. But after reading the e-mail several more times, and thinking about it, maybe the author is just asking for my help in their job search. Or, maybe the author is trying to ask for both. I just canāt tell. My advice, be clear in your intentions. If you are asking me to help you out, by keeping my ears and eyes out for you, thatās fine. If you are asking me for a job, thatās fine, but donāt do both in the same e-mail. Be clear in what you are asking of me, and target your letter appropriately.
–A corollary of the above point is that if the author is asking me for a job (which I am not sure), such a cover letter should only be sent to people who can influence hiring. My job has nothing to do with hiring people, so I am the wrong person to e-mail if the authorās goal is to ask me about potential employment. My advice, if you are contacting someone about getting a job with a company, you need to target someone who is involved in the hiring process. If this is the case in this cover letter, I am not the right person, which tells me the author has not done their research.
–The last paragraph also says that I am a ātrusted source and I have worked with you in the past.ā While I think I remember meeting this person, I have never worked with them. This generic comment may be a result of sending out a mass mailing, but it doesnāt resound very well with me, as having talked to a person once doesnāt mean the same to me as āI have worked with you in the past.ā My advice, be sure you target your letter appropriately. If the letter had referred to our one conversation, this would have made more sense.
–I am confused as to why the author mentions their salary in the cover letter. If I am being asked to help them out by watching out for potential jobs for them, I donāt need to know their salary, after all, I donāt work for a job placement agency. If I am being asked to consider them for employment, a resume cover letter is not the proper place to talk about salary. My advice, donāt share your salary with anyone who you are asking for help looking for a job, nor should you share your salary with a potential employer the first time you contact them. In addition, many companies have their employees sign a confidentiality agreement when they are hired, which often includes a clause not to share your salary with anyone. I donāt know if this person has signed such a clause, but if they have signed such an agreement, they are now violating it.
–The cover letter says āPlease keep me confidentiality.ā Besides the bad grammar, what the author is forgetting is that if you send out unsolicited e-mails to people you barely know, that you canāt expect confidentiality. My advice, if you want to keep something confidential, donāt send it in an e-mail, as there is no such thing as confidentiality on the Internet.
–Other than the personās first name at the end of the e-mail (the last name is not even mentioned), and the e-mail address, there is no contact information for the person. My advice, include you contact information so people know how to get back in contact with you, other than by e-mail.
Obviously, this letter was written out of frustration, and probably written in a hurry without a lot of thought. Now, I donāt want to give you the impression that I am picking on this person. In fact, my heart goes out to the author of this cover letter, as I fully understand their frustration. The point I want to make is that the approach taken in the cover letter probably wonāt work, and if fact, it might backfire, should the current employer find out about it. I say this because I personally know a DBA who accidently CCād his current boss when sending out a very similar letter (and resume), looking for new work.
I admire that this person is looking for a new job, as looking for a new job can be a very stressful experience, only adding to their current levels of stress, anxiety, and frustration. Hopefully, this person will quickly find new work that is better suited to their needs.
SQLSaturday #44!
Andrew Karcher and Marlon Ribunal are heading up SQLSaturday #44 scheduled for April 24, 2010 at Golden West College in Huntington Beach, CA. Itās definitely an aggressive schedule, but they have the date locked in and a good plan. This is our first SQLSaturday in California and the first one set up since the transfer of SQLSaturday to PASS. Call for speakers is now open.
Notes from the 2010 South Florida Code Camp
Drove down with the family Friday afternoon, not much traffic and a smooth trip. Checked into the Residence Inn just down the street from the event, caught up on some email, and then walked across 2 blocks of not yet build hotel space to La Carreta, a local Cuban restaurant and the site of the speaker gathering.
Started the speaker party at 5:30 pm and it ran until almost 9 pm, with about 20-25 people there at any one time. Lots of interesting conversations, including one about a book swap they are trying out at the event; bring a book, swap it for any other book, or buy one for a dollar with the proceeds going toward needs in Haiti. All the books were donated by attendees or members of the local user group. Interesting idea if it works. Dinner was very good (strips of filet mignon in a sauce with rice), for dessert I had bread pudding (nice to have something different), but just couldnāt quite manage the Cuban coffee ā too much for me, thatās intense coffee.
Saturday I arrived on site about 9 am after breakfast at the hotel, did a quick check in at the speaker room and then off to do my first presentation on statistics. On the way I had someone stop me and introduce himself, turned out last year he had attended this same presentation and it had opened a lot of doors to what was possible with SQL, which in turn resulted in some serious growth in skills. Not often this happens (to me at least), and it made my day. Nice to know that the investment of time and money to drive down to Miramar was making a difference.
The statistics presentation went well, and as always at a developer focus event (38 devs, 2 DBAās in the room) Iām reminded of their thirst for more information about SQL. Very common for them to have no DBA/sql person on staff, so they want to learn things that will help them, or help them understand why things happen at least. Tons of good questions.
Immediately after the stats presentation I had to change rooms to do my talk on social and not so social networking. Smaller crowd for this one, only about 10, but good conversation and about the usual adoption pattern ā most on LinkedIn, few on Twitter, one blogger. Finished up by doing a drawing for a autographed copy of How to Start a Conversation and Make Friends.
Then it was time for lunch, the standard pizza, soda, and salad. Caught up with a few friends at lunch, had a few other conversations, and then headed up to see Scott Kline do a presentation on SQL Azure. About 20 attendees. A lot of questions about backup/restore and service level agreements. Lots of questions about does this work or not? Lots of restrictions, some that make more sense than other to me. Pricing is confusing. Seemed to me that most were taken aback by the number of limitations and that will hurt adoption.
Next went to the data mining presentation, but the speaker didnāt make it, so offered to do Q&A for the hour, and had about 40 people stay for that. Good conversation, and we should try at all events to have room for Q&A. Note that for whatever reason 2 of 6 speakers on the SQL track didnāt show, someone from the audience filled in on the other missing one. Disappointing, but whether they were truly lost or had cancelled in advance I donāt know. Still, a shame to disappoint attendees.
Just before leaving checked on the book swap, and there had 15 true swaps, but $150 in cash ā at $1/per book!
Finally left for the long, rainy ride home. Good day and good event, thanks for Dave Noderer and team for a really nice event.