Pages

Tuesday, 9 July 2013

Clustered Column store index recap

Last week I blogged on the Clustered Column store index, I’ve been playing with it – its very early days, as its a feature of SQL2014 CTP1.

Just to recap.  I noticed that something wasn’t working as I expected.

image

The number of rows returned from the report ‘Disk usage by table’ is incorrect, shown by the top results set, the correct number is shown from select count (*) query and the select from sys.partitions.

Also notice on sys.partitions, the compression description.

image

So how do I get the standard report to show the right data?

Well, restarting the instance doesn’t help.

But what about rebuilding / re-organising the index? Re-organising the index does nothing, but rebuilding the index works!

image

All the counts are returning the expected number of rows, now everything is alright with the world.

Wednesday, 26 June 2013

Very interesting things about updateable column store indexes

After more digging, I’ve found a link on msdn to information about the new system table sys.column_store_row_groups. http://msdn.microsoft.com/en-us/library/dn223749(v=sql.120).aspx

This bit “The hobt_id for delta row groups, or NULL if the row group type is not delta. A delta row group is a read/write row group that is accepting new records. A delta row group has the OPEN status. A delta row group is still in rowstore format and has not been compressed to columnstore format.”

So this sounds like there are still two tables [or row groups], the delta row group which you can read and write into and a 2nd row group which is compressed.

This is the work-around people have been using with the non-updateable column store indexes to make to work like they are updateable, but its happening behind the scenes. 

 

Very very nice.

More interesting things about the Clustered Column store index..

I’ve previously blogged on some interesting things about the clustered column store index or CCSI for short.

I’ve found my CCSI in an internal table.  sys.Column_store_row_groups

image

Noticed the size_in_byte…NULL

Just for fun, I tried to create a 2nd column store index on the same table. (Non-clustered of course)

image

So we can’t add a non-clustered column store index (NCCSI) to a table that already has a CCSI.

But can we add two NCCSI to a table? The answer is no, but the UI doesn’t let you get that far.  Its non-selectable.. interesting..

image

And more digging….

Interesting thing about updateable Clustered Column Store Index

I downloaded SQL Server 2014 CPT1 last night and I’ve started playing with it.

I’m really interested in the updateable clustered column store index, so I thought I would see if it works in the CTP1 (not all features are released in the CTPs)

I created two identical tables, added a Clustered Column store index to one of them, and inserted 15000 rows into both of them.

Guess what, it only bloody worked! Excellent! Happy bunny.

So the next step, how does it work? While looking at the IO for the insert, I stumbled on this..

image

TestTB_1 has 15,000 rows and TestTB_2 has 0 rows… Wait a second, that’s not right.

image

No – There are 15,000 records in both tables.

image 

Wow – check out the logical reads,physical reads…etc…etc..

All coming back as 0 – I guess the column store engine isnt reporting back in the same way the normal engine is.

This will get fixed at some point, no doubt, but the fact that the column store index was updated is so cool…

I’m going to do some more digging now…

Monday, 10 June 2013

Going to SQL Relay?

Going to SQL Relay? Show some support and impress your friends and colleagues with these two badges.  Not going to SQL Relay? Why not! Go to the SQL Relay web site and find out where your nearest event is.

“I’m speaking at SQL Relay”

<a href="http://www.SQLRelay.co.uk"><img src="http://www.SQLRelay.co.uk/images/SQLRelaySpeaking.png"></a>

“I’m going to SQL Relay”

<a href="http://www.SQLRelay.co.uk"><img src="http://www.SQLRelay.co.uk/images/SQLRelayGoing.png"></a>

Wednesday, 15 May 2013

How many rows in that table?

How many of us have typed ‘select count(*) from TABLE’ when we want to know how many rows in a table?

There is another way, by querying sys.partitions. 

I’ve compared the performance and IO.

 
   1:  SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
   2:   
   3:  SET STATISTICS TIME ON;
   4:   
   5:  SET STATISTICS IO ON;
   6:   
   7:  SELECT COUNT(1)
   8:  FROM   MYBIGTABLE
   9:   
  10:  DECLARE @objid AS BIGINT;
  11:   
  12:  SELECT @objid = object_id
  13:  FROM   sys.tables
  14:  WHERE  name = 'MYBIGTABLE';
  15:   
  16:  SELECT SUM(rows)
  17:  FROM   sys.partitions
  18:  WHERE  index_id IN (0, 1)
  19:         AND [object_id] = @objid;
  20:   
  21:  SET STATISTICS TIME OFF;
  22:   
  23:  SET STATISTICS IO OFF;  

The results from STATISTICS IO and TIME are as follows;


Table 'MYBIGTABLE'. Scan count 1, logical reads 115328, physical reads 0, read-ahead reads 115328, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.


SQL Server Execution Times:
   CPU time = 27628 ms,  elapsed time = 61186 ms.


So over a minute.


For the query on sys.partitions;


Table 'syssingleobjrefs'. Scan count 1, logical reads 2, physical reads 2, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'sysidxstats'. Scan count 1, logical reads 2, physical reads 1, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'sysschobjs'. Scan count 1, logical reads 4, physical reads 2, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.


SQL Server Execution Times:
   CPU time = 16 ms,  elapsed time = 140 ms.


(1 row(s) affected)
Table 'sysrowsets'. Scan count 1, logical reads 10, physical reads 0, read-ahead reads 7, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.


SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 35 ms.


So 140+35=175ms, so less than a quarter of a second compared with 61 seconds.


Much much much much much much faster!

Monday, 8 April 2013

Technology: Why I Hate and Love you so…

I word in IT, I love and hate technology with equal passion…

Technology makes our lives better, wireless networks, cheap computers, mobile phones that can make calls / play games and make a terrible cup of coffee… We can do more..cheaper.. 

But its the most frustrating thing in the world, when the iPad doesn’t find the airport printer…What do you do? Reboot everything….if that doesn’t work, setup everything from scratch again…if that doesn’t work? Pray to the God of Calculators… if that doesn’t work??? ? ? ? Hours later… still doesn’t work, even after selling my soul to the God of Calculators….

But wait a second, the iPhone can see the airport printer… so its a problem with the iPad..

At that point I give up and print from a PC {wirelessly}– several hours of my life I will never get back….

Viva technology!!

More Blogging…

This is my second post where I state my intention to blog more…’this time is personal’ (tag line from Jaws: The Revenge’ )…

Just like everyone else I have blog ideas that fade into nothingness, either I forget it and move on or it takes so long to write something witty and informative that it just gets binned…

So I will try and keep then short and sweet, amusing if possible, but unlikely. But most of all, actually blog something.

Sunday, 16 December 2012

12 days of Geekmas..on the 3rd day

Yes, I am a geek and Yes, I'll do almost anything for something geeky :-)



Tuesday, 27 November 2012

#BADSQL 2

This is my 2nd submission for bad SQL..

Bad SQL 2:
The dev system has run out of disk space.  Lets shrink all the databases, that will free up some space.

EXEC sp_MSForEachDB 'DBCC SHRINKDATABASE (''?'' , 0)'

It might seam like a good idea, but it does apply to EVERY database.
DBCC SHRINKDATABASE ('master' , 0)
DBCC SHRINKDATABASE ('tempdb' , 0)
DBCC SHRINKDATABASE ('model' , 0)
DBCC SHRINKDATABASE ('msdb' , 0)
DBCC SHRINKDATABASE ('ReportServer' , 0)
DBCC SHRINKDATABASE ('ReportServerTempDB' , 0)

Monday, 26 November 2012

SQL Event Calendar

 

The SQL event calendar for next year is filing up!!

Tell your friends/colleagues and your pets!

 

SQL Santa London (#sqlfaq) 14th December - http://sqlserverfaq.com/events/452/SQL-Santa-2012.aspx

SQL Saturday Exeter (#sqlsat194) 8th-9th March – http://www.sqlsaturday.com/194/eventhome.aspx

SQLBits XI Nottingham (#sqbits) 2nd–4th May - http://sqlbits.com/

SQL Saturday Scotland  Edinburgh (#sqlsatscotland)  7th-8th June - https://twitter.com/SQLScotland

SQL Relay – (#sqlrelay) Dates coming up…. 

SQL Server User Groups (UK Wide) Various dates (#sqlfaq) - http://sqlserverfaq.com

SQL Saturdays (World) Various dates (#sqlpass) http://sqlsaturday.com

Bad SQL, Naughty SQL!

 

During my time as a dev, I’ve done some bad things in SQL, some terrible things that still give me nightmares. 

But I feel like a bit of therapy and I should share, and perhaps you would like to share too?

Bad SQL 1:

I think I used it on a dev system that ran out of space.

   1:  EXECUTE sp_MSforeachtable "ALTER TABLE ? REBUILD WITH (DATA_COMPRESSION = page)";  

 

Feel free to share your BAD SQL, please post anonymously if you are too ashamed. Smile