Latest Posts

TechEd 2008 – Monday

So, today was the first full day of teched, and as usual, it felt like standing underneath an information waterfall. So much to see, learn and try to remember.

I started the day with Peter Willmot’s session on BI, specifically on cubes and how to present them to the users. Couple of cool sharepoint features, including reporting service web parts and the excel services. Since I committed to learning sharepoint, it’s interesting to see just how much integrates into it.


TechEd 2008 begins

So, TechEd South Africa started today. So far it’s been fun. As usual for the local TechEd events, the sunday was the opening keynote and a nice party. Some points that struck me during the keynote:

  • Microsoft is heavily pushing the virtualisation technologies, including Hyper-V
  • The application virtualisation looks fantastic for large corporations
  • Silverlight 2 looks very cool
  • Still no release date for SQL Server 2008

I have nothing particularly technical, just a couple pictures of the opening party.


All's well that ends well

So, today was my last day working for the bank and my last day as a full time employee. From the beginning of next month, I’m a consultant. It’s exciting and scary at the same time.

I’m not going to wax long and lyrical about the years working there, that’s boring. Suffice it to say there were good times and bad, late nights and weekends working, and leave it at that.

The one thing that I will say is that without the support and encouragement of several people there, I would not be where I am today. So, a very, very big thank you to my former colleagues and managers. I won’t mention names, you know who you are.

And I have to show off a couple of photos of my old desk 😉

Recovery model and transaction logs

Or “Remind me again why we’re doing these backups in the first place

If there’s one topic that comes up again and again on the forums, it has to be the problem of full transaction logs, usually followed by the discovery that the DB is in full recovery mode and no log backups are running.

Quite often, someone will suggest to just truncate the log and shrink it. It’s a dangerous suggestion, not so much for what is said, but for what is not said. To understand why, requires a little background information. First, a look at recovery models and how they affect the transaction log.

Recovery modes

I’m going to ignore bulk-logged mode for now, mainly it’s less used than the other two and I’m not completely comfortable with how it works. I’m also going to ignore replication and database mirroring, as they complicate the issue.

Regardless of the recovery model that the database is in, transactions are logged into the transaction log before they are considered complete. The entries in the transaction log are considered active until all the data pages that were modified by the transaction have been written to disk. The two processes that write pages to disk are the lazy writer and the checkpoint process. Once all the pages that the transaction have been written to disk, the log records for that transaction are marked as inactive.


Tech-Ed South Africa

There’s just two weeks left before the local Tech-Ed conference gets under way. For the first time, it’s not at the Suncity resort, but rather in the coastal city of Durban. I think it’s going to be quite awesome this year.

The final agenda was made available a few days ago and there’s a lot of very nice content. In fact, there are over 200 sessions being offered over the course of two and a half days on a wide variety of topics.

I’m doing two Chalk and Talk sessions:

  1. What to Watch – Finding Performance Problems Before the Users Do. Tuesday, 08:00
  2. Effective Indexing and Query Optimisation. Tuesday, 14:45

If any readers of this blog are going to be there, please come and introduce yourselves.

What is a deadlock

I’ve run into a fair bit of confusion in the forums recently on this, so I thought I’d quickly explain what a deadlock is, and how it differs from blocking and locks.


Locking is a normal part of SQL’s operations. When a row is read by a query, a lock is placed on that row to prevent the row from changing during the read. When a row is modified a lock is placed on the row to prevent any queries reading the value as it is changing.

Locks can occur at the row level, at the page level or at the table level. As long as they are short lived, they are not a problem in and of themselves



Talk about a way to start off a month.

I just got a mail from Microsoft. I have been awarded MVP for SQL Server. I am quite ecstatic and very surprised. I knew I had been nominated, but I did not expect to actually be awarded it.

Just wow.

Looking forward

So yesterday I looked back on the half year gone. Today I’m going to look forward to the half year to come and set some goals for the next 6 months.

I’m doing this on the assumption that goals made public are more likely to be kept than goals told to no one. Even if no one’s going to hold me to the goals I set, the fact that I announced them to the world (or the small part of it that reads here) makes it more difficult to discard the goal.

So, what’s planned for the next 6 months?


Mid-year round up

It’s half way through 2008 and I’m not sure where the year went. It feels like it was Christmas just the other week. Being half way through the year, I thought I’d do a quick look back over what has happened so far.


SQL 2008 – More impressions

I spent a little more time playing with SQL 2008 this week, though not as much time as I would have liked. I took a look at filtered indexes and some enhancements and changes around the display of the execution plans in Management Studio.

Filtered indexes

These are an interesting feature. There are many uses for these in larger systems and on larger tables. Normally an index is built over an entire table. With a filtered index, one or more predicates is specified when the index is created and the index only contains data that satisfies the predicates. The columns involved in the predicate do not have to be part of the index key, or the index include columns.