SQL Bits 7 Session Submitted – and a week of glorious unemployment!

Submit a session for SQLBits SQL Bits 7 has just been announced and it’s going to be in York at the end of September! The free community day is Saturday, with 2 paid days on Thursday and Friday, similar to SQL Bits 5. I have submitted a session on ‘Performance Tuning Quick Wins’! It was a compulsive thing .. I hope I get chosen!

I will let you know when voting opens!

I have a week off this week in between jobs. I had my last day at RM on Friday last week, I will be starting my new role at Helveta on Monday next week, I am very excited about it!

I’m greatly enjoying a bit of free time. I am spending a lot of it here:-

Yesterday, the summer solstice, was perfect: 25°C, cloudless sky, and barely any wind. The pool was heavenly!

For the rest of the week, it’s more of the same, with a few lunch meetings with friends and ex-colleagues, then on Thursday I’m going down to look after my Mum’s farm (pictured, right) while she and her husband are away. The forecast is excellent, I can’t wait for some lovely swims in the Atlantic (maybe at Perranporth beach, below)!

I am going to take my bike (bottom right) and do some riding on the lovely, rolling, quiet roads of North Devon. I hope you’re envious!!

I love having a week off at this time of the year – I should definitely do it more often!

But maybe not always unpaid …..


IT (and general) Recruitment Advice for Candidates

I have recently been offered, and have accepted, a new job. When this news filtered out many people have asked me for advice about CVs, interviews, and job hunting in general. Without wishing to sound big-headed, I am good at it. I have been offered every single job I have applied for in the past 15 years. My CV is lean, neat, short & to the point, and I believe I am justified in being a little proud of it.

I decided to blog about this so I could point people at this rather having to repeat myself.

First of all, let’s start with the CV. My golden rules are as follows:
1. No more than 2 sides of A4. This is non-negotiable. Any more than that is just boring. No you are not that interesting.
2. Endless lists are dull. List your technical skills, tersely, and honestly.
3. Your CV must be completely honest. Lies will only end in tears.
4. It must be grammatically perfect. Including punctuation.
5. You should not omit the word “I..”. Sentences should read like sentences. This is a descriptive document, it is not minutes from a meeting.
6. The format and layout should be simple, clean and uncluttered. Lose the fancy headers and footers. KISS. (‘keep it simple, stupid’).
7. Include a summary “Personal Profile” saying what you are like, what your soft skills are and why you’re a good person to employ. I have one in my CV and I think it does me a lot of favours.
8. Keep employment history relevant and brief. We don’t care about that casual gardening job you did when you were 16.
9. Put in something to make you sound like a human, not an automaton. Tell us you like watching telly, or going to the pub. I’m more interested in people who sound like they actually have a life outside of 9 to 5.
10. Don’t worry unduly about the minutiae – wording, etc. The facts will speak for themselves. If your CV is good – it will get you an interview. But it’s the facts on it that count – the job history, the qualifications, the personal profile.

Check out my CV here – I do genuinely think it is a good one. Or email me for a copy.

You will probably have 2 rounds of interviews. Possibly a screening telephone interview first too. Most of the following advice is common sense, but I’m going to say it anyway!

1. Stay calm. Being a little nervous is good, it will make you sharper. However don’t get gripped by panic and fear – it won’t help you sell yourself.

2. Look good. Be clean. Wear smart clothes – suit and tie mandatory for men. Shave. Squeeze your spots. Moisturize. It will help make you feel good about yourself. Iron your shirt. Have your suit dry-cleaned.

3. DO YOUR RESEARCH. Ensure you know the following key facts about your prospective employer
– summary history of the company
– rough figures of turnover, profit, number of employees, location of offices, etc
– background or basic knowledge of their sector, services and products, and their markets
– know in advance the name(s), job role and title of the people who will be interviewing you

4. Have good quality questions ready, for example:
What makes this company a good place to work?
Who are your competitors?
Why did the incumbent leave, why have you got a vacancy?
What are the prospects for this company, is it growing, what are its threats and opportunities?

5. Do not discuss pay and benefits until you are asked about it. Do not broach it. Wait. They will come to it when they are ready. You do not want to appear to be a money-grabbing desperado.

6. Do not slag off your current employer. Explain your motivations for looking for a new job in positive terms (e.g. ‘I am looking for new challenges that I feel my current role lacks’, not ‘I am bored’.) Make sure you KNOW what your motivations are before you even start typing your CV.

7. Have examples of things ready in your mind. Be ready with examples to use in answer to these type of questions:
When have you had to work under pressure?
Give an example of having had to deal with a difficult colleague/client/boss etc.
Tell us about a piece of work you were particularly proud of.
Give us an example of something you might consider to be a weakness. And no – do NOT say you don’t have any.
Tell us about a time you felt like you were out of your depth, how did you cope?
How do you persuade someone to do something for you that they don’t want to do?
Have all this stuff ready,with meaty, relevant, fresh examples at your fingertips. Do not just say “I am hard working and well-organised.” Say, “I am hard working and well organised. A good example of this is the time I … “ Do this unprompted too, if possible – it is very impressive. They will love you.

8. Be prepared to pause. It is fine to say “let me think about that for a moment”. Use natural pauses to compose yourself. Try to come across as steady, thoughtful and composed – it’s very attractive.

9. Admit if you do not know something – do not flannel, bluff or make cr*p up on the spot – it is painfully transparent. Instead say, I don’t know that, but I know where I’d look to find out. Everyone has Google. There is no need to pretend you know everything.

10. Be respectful. Do not use first names unless explicitly told to do so. Above all – do not get flustered. Even if you feel you are struggling.

11. Do not slouch, swear, chew gum, be over-familiar, or crack too many jokes.

Technical Stuff
You will have to answer technical questions if it’s a tech role. Don’t worry if you don’t know everything. I had a screening 20-question tech interview by my recruitment consultant, before I even got anywhere near the hiring company. I didn’t know it all, but I got 16/20 and that was good enough.

In the tech interview(s), be prepared to talk about work you have done, be ready with examples of things. This is where your technical skill and knowledge will shine through. There will be open questions where you can really make yourself sound good. Tell them about the time you worked through the night to deliver a new highly-available clustered system without downtime during the working day. They will love you. But you have to come prepared. But do not worry – I repeat – no one is expected to know everything. You just have to convince them that you know enough.

Recruitment Consultants
These people need to be very carefully marshalled and I will write a whole separate post about them. They can be your friend, they can also be an almighty pain in the ar*e. They either ignore you or bombard you with calls to your mobile phone at inappropriate times during the working day – there seems to be no middle ground. Keep your personal mobile on silent during the working day – insist they deal with you via your (personal) email. Lay the rules down for them – don’t let them make rules for you. They stand to make up to £10k in commission/fees out of getting you the job – make them earn it.

Offers/Notice/Salary negotiations
Again, it’s common sense. DO NOT hand your notice in until you have a written offer, and you have formally accepted it. Do not haggle unduly over salary but set a hard minimum – hopefully someway above your current salary, although not necessarily – and rigidly stick to it. Don’t let them get you cheap. Insist on benefits for pension, bonus, child care, private healthcare that match your current at a minimum. If it is a small company with no pension scheme of their own insist they contribute to your private pension.

This is all a bit of a brain dump – I will be editing this post as new things occur to me. Email me if you want specific advice. I don’t mind casting my critical eye over your CV, as long as you are ready to receive unsparing criticism back.

High Availability in the Real World at SQLBits 6

On Friday 16th April 2010, I presented at SQLBits 6. It was held for the first time in London, and also (another great improvement) on a Friday as opposed to Saturdays as before. Unsurprisingly it was by far the best attended SQLBits Community Day (free for attendees and speakers unpaid, expenses covered by sponsors) so far, with 438 attendees.

I really enjoyed the sessions that I managed to attend. Keith Burns on first presenting about SQL Azure, which seems to be progressing steadily despite the hitherto apparently crippling lack of features, Conor Cunningham was next who stealthily managed to avoid the volcanic ash cloud from Iceland to fly in from Texas and present a fascinating session on the Query Optimizer. He was in a room which was used to hold parliament during WW2 (the venue itself is very close to the Houses of Parliament, right next to Westminster Abbey). It was packed – standing room only!

parkplaza I also attended Tony Rogerson’s session on Normalisation and a round-table open Q&A session after lunch with Keith, Conor and Simon Sabin to fill in for a cancelled session by Klaus Aschenbrenner who couldn’t make it due to the closed airspace. I was up at 3.10pm, presenting on High Availability In The Real World, attempting to give an honest and grounded outline of the pros and cons of the HA various options. I was pleased with the turn-out, had some good questions during and after, and felt generally satisfied.

Whizzed off after that to check in to the very cool hotel (picture from the atrium looking north (L)) – it’s only been open for 3 weeks! There are some other good pictures here, including some of the day in general.

Then I hurried back to the Church House Conference Centre for some well-earned beers at the post-conference party. I hung out for a while with Iain Kick from Quest who was pleased to have heard me plugging his company’s software twice during my session!

I stumbled out at 7.30 to meet my girlfriend and some other friends for drinks and dinner. All in all a great day, thanks as ever to the organisers, Simon, Darren, Allan, Tim, Martin, James, etc – great job, can’t wait till the next one.

Simon mentioned it might be in Oxford next time round – yes please, I’ll be able to cycle in!

You will be able to find links to my slides and sample scripts on the SQLBits site soon.

Update on SQL Server 2008 Clustered Instance connection timeout issues

I am still struggling on with this issue. Despite several weeks of mine and PSS’s efforts, we are nowhere nearer resolution.

I took advantage of New Year downtime in the factory at work to completely remove then reinstall the instance. Sledgehammer to crack a nut? Well..

A lot of effort, many hours planning and preparation, and all to no avail – both the timeouts issue and the (probably unrelated) Access Violation on a certain update issue remain.

I thought I’d share a quick overview of how I went about the reinstall, if any of you ever find yourself in a similar boat. the outline plan went like this:-

1. Put all cluster resources in maintenance mode in monitoring tool. Full backup to disk of all DBs.
2. Disable all relevant jobs, interfaces, etc, keeping a list for re-enabling (or script as appropriate)
3. Unsubscribe publications to and from the instance.
4. Detach user dbs and leave data and log files in tact in cluster partitions.
5. Remove instance in turn from each cluster node.
6. Reinstall instance on each node in turn. (used vanilla RTM install this time, to try to eliminate slipstreaming SP1 as a possible cause of issues)
7. Applied SP1 and CU5 to the instance on each node.
8. Reconfigure (trace flags, memory, static port assignment, tempdb layout etc)
9. Restore msdb (with SQL Agent cluster resource offline)
10. Stop SQL Server cluster resource.
11. Start SQL Server locally via command line in single user mode (outside of clustering).
12. Restore master using SQLCMD.
13. Restart all cluster resources and check. Check all logins and jobs are back.
14. Remove cluster resources from maintenance mode.
15. Recreate publications as necessary, re-subscribe and re-sync.

Restoring the master database on a cluster is interesting (first time I’d ever done it).

Navigate to the location of the SQL Server executables from the command prompt (in my case, something like..
C:\Program Files\Microsoft SQL Server\MSSQL10.INSTANCENAME\MSSQL\Binn

and type

sqlservr –c –m –s INSTANCENAME

where INSTANCENAME is simply the named instance name, not including the SQL Server virtual name (that is not clear in BOL).

Then open an SQLCMD connection, such as like this, and restore the master db:-

>restore database master from disk = ‘\\path\backup.bak’ with replace

This restores master and then SQL Server is stopped and you are unceremoniously disconnected.

Of course, this was vaguely interesting, but I certainly had better things to be doing at 6am on the 2nd of January! And it didn’t fix my problems. But it was worth a try, I guess.

Under Microsoft Premier Support Services’ direction, we are testing installing a brand new 2008 instance into the cluster to see if we can isolate the issue to this one problematic instance.

More on SQL Server 2008 Connection Timeouts

A few more details on my current woes with SQL Server 2008. This is 64-bit Enterprise Edition, SP1 + CU5. We are getting severe, intermittent, but easily reproducible connection timeouts. This is when you attempt to connect to the instance, but the client eventually gets fed up of waiting and gives up, like this in Management Studio:-


This timeout is set by default in SSMS to be 15 seconds (plenty long enough to establish a connection to an instance on your LAN, Gigabit connected, fast server)…


This error is slightly different when you generate it using SQLCMD:-


I am getting other symptoms of the same underlying issue, e.g. occasionally when trying to read the error log in a query window using xp_readerrorlog:-


I have no resolution for this issue yet; will update if/when I do. Troubleshooting with Microsoft Premier Support has involved registry changes for things like Max Ports, chimneying off, SynAttackProtect (no benefit). We have also done network tracing using WireShark. I have done some testing with a custom Microsoft-supplied app, and also my own testing using SQLCMD. And before you asked, yes I have tried rebooting!! That’s not an easy thing to arrange when it’s a live 4-node cluster supporting 24X7 websites and applications… one of the (many) compelling reasons to have a passive node in your cluster, which you can use precisely for this kind of thing.

Wish me luck.. even the Director’s started asking for daily updates. Urgh!

SQL Server 2008 stress

10 days ago I upgraded several databases from an old, standalone, 32-bit Windows 2003/SQL Server 2000 server. I moved the databases onto a new SQL Server 2008 x64 SP1 instance, one of 6 running on our core 4-node cluster (4 x 2005 instances and 2 x 2008).

Shiny, spangly, highly available, modern, up-to-date, 64-bit, loads more memory and processing power… nothing could go wrong, right?

First problem was exposed by transactional data replication, into a subscribed table with triggers on it, and this was causing Access Violations and Stack Dumps, so frequently that the small(ish) system partition was soon filled with mini-dumps. We worked around this by changing the trigger (but the underlying issue remains unsolved).

But a more problematic issue is frequent, intermittent, connection problems and timeouts (in SSMS, the default timeout period is a mere 15 seconds). This server is used in my company’s factory, in assembling PCs. The timeouts have been causing so many problems to PCs being build and burn-in tested on the production line that I am getting serious heat.

So .. installed CU5 for SP1 at the weekend.. the timeouts went away for a tantalising 48 hours and I truly believed the issue was fixed, only for it to return with a vengeance this morning. Cue seriously unhappy users and senior managers. Severity A case logged with Microsoft Premier Support. No resolution yet … but a very tired DBA here after a pretty stressful 10 days at work. Christmas can’t come too soon.

MPS are really good and the service can’t be faulted, but I’d rather not have to talk to them at all (with the greatest of respect!)

New York trip

On the last weekend of October it was my wonderful girlfriend’s birthday and as a present I took her to New York for a long weekend. We have an old friend, Dom, who lives there. I was at school with Dom. He is now married to the lovely Caden, and they have 2 children, the charming William (just under 2), and sweet Stella who is 8 months.

We had to hurry to Heathrow after work on the Thursday. I paid slightly more for British Airways flights, because I like them and I absolutely love Terminal 5. As a plane freak (check out my Facebook ‘Aeroplanes’ album for proof), I just love the great views it gives you. Impressively, both flights were on time. Maybe my expectations are too low!? Also I like the service on BA, I like the food, and I like the fact that it’s British.

We gained 5 hours on the way over and arrived there at 2230. It was 1am by the time we made our way by train to Dom’s lovely apartment in the Park Slope area of Brooklyn.

On our first day we simply explored .. and walked so far it made us ache the next day!

We started out, on a grey Friday morning, walking over Brooklyn Bridge into Manhattan. (right).

On Friday night Dom treated us a to a wonderful meal out near their place.

On Saturday it rained, but we continued to explore, taking in the Guggenheim Museum, which had a Kandinsky exhibition. (below)



On Saturday we also explored the High Line, a disused elevated train line that has been converted into an urban park on the East side of lower Manhattan .. very cool:-

Sunday was a beautiful day, and we made the most by going on a lovely boat trip down the Hudson past the Statue of Liberty.


The best was yet to come, though, on Sunday night we went to the Giants Stadium to see the NY Giants play the Arizona Cardinals (the home team were defeated 17-24). Thoroughly entertaining, despite the extortionately priced beer.

The best bit of all was the fantastic view from the plane on the gorgeous, clear Monday morning when we flew back – JFK airport and Manhattan in the distance:-


All in all a fabulous trip. My first time in NYC was totally unforgettable. Despite the painful knees and heels from the walking!


DSCN1796 25102009511

Above: me in Grand Central Station (L), Anna on the Subway (R)

Below (L to R): Anna, William, Stella, Dom and Caden.


My SQL Bits 5 Community Day Session

Today I have been working on my session for SQL Bits 5. This will be the third SQL Bits community day I have presented at, after SQL Bits 2 in Birmingham in March 2008, and SQL Bits 4 in Manchester in March 2009.

My session is about Real World SQL Server High Availability. I have to do a lot of Clustering, Mirroring and Log Shipping at work. I thought it would be a good idea to talk about what these options are like in real life, what the business considerations are in choosing one (or not choosing one!), how easy they are to set up and manage, and what the pros and cons of each option are.

I am really looking forward to the event. In my (admittedly fairly biased) opinion, the quality of training you get at this kind of event far exceeds Microsoft Official Curriculum training courses, and SQL Bits Community Day is .. free!

I hope to see you there.

Performance Tuning and Troubleshooting: Missing Index DMVs and the DTA

The past couple of weeks have been interesting at work, instead of the usual steady stream of cluster builds and upgrade/migration projects, I have been working pretty much flat-out on several applications, each of which has been suffering from chronic performance problems, in varying degrees.

In the perfect world, you would go about solving performance problems by examining the code, execution plans, re-writing it if necessary, suggesting helpful indexes, and so on. Of course, the world isn’t like that!

The first application I was working on is written by a subsidiary of the company I work for. It is meant to be “database agnostic”, and supposedly could be deployed on RDBMSs other than Microsoft SQL Server. In reality it is never run on Oracle, but the result of the design choice means that it has no SPs, uses no proprietary syntax or features, and also means it is impossible for a DBA (as opposed to a Developer) to modify application code, as it is all embedded in the application.

To compound its issues, it uses a database design of multiple schemas, one for each customer, each of whom gets their own identical set of 400-odd tables. Hence you end up with a database with 177,000 (no that’s not a typo!) tables. Having a database with that many tables in brings its own challenges when trying to run dbcc checkdb or update statistics!

Performance problems in this system are normally “solved” by throwing hardware at them, this instance was no different – with performance so appallingly bad that customers were threatening to ditch the product in favour of one of its competitors, the spending freeze at work suddenly, magically thawed, and 2 new brand new blade servers were bought in a rush. Management ignored the recommendations of a team of 5 highly experienced DBAs to implement them as a Windows Enterprise Cluster, choosing instead to use Standard Edition (synchronous only) database mirroring, which we already know causes performance problems in 2005.

The second system I was looking at had several interesting, but different, issues. It uses LINQ. In a word.. urgh. If you have ever seen the code that LINQ spits out, you will already know that it sucks the big one! This system is run on an Active/Passive 2-node Standard Edition SQL Server 2005/Windows 2003 cluster. For a start, it was woefully short of RAM (8GB only). 24 GB for each node are on order, badly needed, as we are seeing a Page Life Expectancy as low as 15 seconds sometimes (dire).

The point about these 2 systems is that, because of the use of embedded ad-hoc SQL for queries in one, and the use of LINQ in the other, opportunities for code tuning/re-writing by a DBA are simply not there.

Also, the performance problems and related customer complaints, lead to pressure from management, and there is (correctly) a great deal of urgency attached to quick-wins. This is where I find the Missing Index DMVs and the Database Tuning Advisor (DTA) come in really handy – they can give you quick answers to what indexes are needed very quickly. This script finds which indexes are recommended by the missing index DMVs and generates CREATE INDEX statements from them (assumed all to be nonclustered, you can tailor this if you wish) Run it in the database in question, and modify accordingly to set the database name in Line 21..

+ ‘ on ‘ + schema_name(o.schema_id) + ‘.’ + OBJECT_NAME(c.OBJECT_ID)
+ ‘(‘
+ CASE WHEN c.equality_columns IS NOT NULL AND c.inequality_columns IS NOT NULL THEN c.equality_columns + ‘,’ + c.inequality_columns
WHEN c.equality_columns IS NOT NULL AND c.inequality_columns IS NULL THEN c.equality_columns
WHEN c.inequality_columns IS NOT NULL THEN c.inequality_columns
+ ‘)’ + CHAR(10)
+ CASE WHEN c.included_columns IS NOT NULL THEN ‘Include (‘ + c.included_columns + ‘)’
END AS includes
FROM sys.dm_db_missing_index_group_stats a
INNER JOIN sys.dm_db_missing_index_groups b
ON a.group_handle = b.index_group_handle
INNER JOIN sys.dm_db_missing_index_details c
ON c.index_handle = b.index_handle
INNER JOIN sys.objects o
WHERE DB_NAME(database_id) = ‘MyDB’  –change dbname here
AND equality_columns IS NOT NULL — comment this out if necessary
ORDER BY a.avg_total_user_cost * a.avg_user_impact * (a.user_seeks + a.user_scans) DESC

It auto-generates indexes with unique-ish names. These recommendations come with the usual warnings – use with caution and care, and ignore any suggestions you think aren’t sensible. However it my experience they tend to be very good suggestions. SQL Server puts data in the missing index DMVs when it executes a query and realises it could’ve done it better with a specific index.

I use these DMVs in tandem with the DTA. Capture a representative sample of application usage with Profiler (using the ‘TSQL – Replay’ template). Then create a copy of your live database(s) on a test, dev or standby server and use that for tuning (don’t use the Live server – it’s a resource-intensive operation!). These recommendations often tally closely with those from the missing index DMVs, and again, give you quick-win performance gains, and can make you look really good to your bosses!

So these tools can be very useful in situations where tuning code directly is impossible, and you don’t have time to dig into specific code and its execution plan, and be more systematic/exhaustive. Good luck!

Our Scottish adventure: 2 Many DJs at Glasgow 02


Last weekend on the 29th August, my great friend Lindsay and I went on a madcap 16 hour flying visit to Glasgow to see one 2 Many DJs. It was very tiring, and great fun.

Originally we were considering going to see them at Creamfields in Warrington, but didn’t really fancy the hassle of a full-blown festival. Lindsay noticed that they were also playing in Glasgow, and I said, Come On, Let’s Go! The flights were very cheap, certainly cheaper than even driving for the two of us.

We set off for Luton on Saturday afternoon and after a couple of beers (for me – Lindz is a teetotaler!!) in the bar, we boarded our flight to Glasgow. I absolutely love flying, as anyone who has seen my Aeroplanes album on Facebook will know. Lindsay loves it too but hadn’t been on a plane for over 7 years!

Impressively, and totally unprecedentedly in my experience of budget airlines, both flights actually pushed back from the gate 5 minutes early! The flight up was lovely, sunny with broken cloud, and we were both excited!

Of course when we arrived at Glasgow there was low cloud and rain, which was a bit of a shame because otherwise we’d have got great views of the city as we skirted to the East and North of it as we approached the airport.

We both managed to grab some pictures on the apron at Glasgow airport as we disembarked until a jobsworth in a high-vis vest came and told us off.


Our plane was a lovely A319:

We were greeted in Scotland by a beautiful, complete rainbow:

“You’re not allowed to take pictures!” … too late!

We made our way to the bus (it was weird travelling with no luggage, not even hand baggage – we were overnighting, but not with any sleeping!). The Glasgow Flyer was another cheap journey, and before long we were in the City Centre. We had planned to eat at Le Tasca, as Lindz had a half-price voucher for it, but when we found it we were told there was a 1½hour wait for a table. No thanks! This was a blessing in disguise as we found a far better option, the marvellous Spice Garden, which is under the arches beneath the railway lines just on the south side of the Clyde. By the time we sat down it was about 9pm and we were both ravenous. It was one of the loveliest curries I’ve ever had, and I can safely say it was the best Naan bread I’ve ever had.

We then made our way along to the O2, both feeling rather stuffed! The gig time was 2200 to 0300. We both expected 2 Many DJs to come on at about 1230, but they kept us waiting till after 0130. However, we were well entertained by the warm-up DJs, and also the hilarious, generally off-their-faces Glaswegians. One woman (who, according to her even more trollied husband, was ‘leathered’) was convinced I was Chris Moyles (totally insulting, eh?). Another bloke understandably mistook us for security – asking Lindsay why he couldn’t find out when the show would start – “Don’t you get told in your earpiece?” .. !! Most of the audience were on a fairly different plane to us, we were definitely the straight guys. I didn’t even have many beers, the queue at the bar was horrendous and I knew I had a long journey to make afterwards!

The 2 Many DJs set was great, and very LOUD. Pardon? Both our ears were ringing for a while afterwards. It was also fiendishly hot, what with all the sweaties! (Sorry, couldn’t resist!). The set was great though. 2 Many DJs mash up other songs, coupled with clever use of videos. Not many other people manage to get Slayer to segue seamlessly into Dolly Parton.

The set started with the Gossip and ended with a great blast of On A Plain by Nirvana.



So, sweaty and buzzing, we stumbled out into the wreckage that is Glasgow city centre at 0330 on a Sunday morning. It was quite an eye-opener. Lots of alcohol casualties, women weeing in shop doorways, lots of group singing, drizzle, kebabs, and decadence.

We found our way to Buchanan Bus Station to find we’d missed the hourly bus to the airport by 3 minutes, so we had to wait under the fluorescent lights for the next one. When it arrived, I was on it and alseep before it pulled out! Fortunately I had Lindz with me to wake me up when we got there, unlike another traveller who was totally conked out, we cruelly left him to sleep and presumably do several airport to city centre roundtrips before he woke up!

We went airside and I crashed out again. Lindz had to wake me up at 0730 as my snoring was beginning to alarm a nearby family. We retired to the bar for a capuccino/hot chocolate, and found a comfy stool among the hardcore Jocks drinking beer, rum, and anything else alcoholic (e.g. WKD) at breakfast time!? WTF?

Before long we were on the plane, I slept soundly till we were nearly at Luton, and once we’d picked up the car and made a quick trip round the M25 and M40, we were home by lunch time, ready for a nap. Thank you to my gorgeous girlfriend Anna for looking after my kids while we were away. And thanks to Lindsay for a great adventure. We’re going to go to Amsterdam next!