A life between bits & bytes RSS 2.0
 Thursday, November 17, 2011

I'm very proud to announce today that I'm running next year a new event series across Europe: the SQL Server 2012 Deep Dive Days. You can learn in this 3 day event all about the new things in SQL Server 2012. The event series is currently planned for the following cities around Europe:

  • March 3 – 5, 2012 in Vienna/Austria
  • March 12 – 14, 2012 in Munich/Germany
  • March 19 – 21, 2012 in Zürich/Switzerland
  • April 16 – 18, 2012 in Cologne/Germany

You can find further detailed information at http://www.sqlpassion.at/events.html where you can also register for the various locations. If you are not from the German speaking area of Europe, I'm also planning 2 events in English in May 2012 at the following locations:

  • Brussels/Belgium
  • London/United Kingdom

In this 3 days long event I'm covering the following topics about SQL Server 2012:

Day 1: SQL Server 2012 Development

  • Project Juneau
  • T-SQL Enhancements
  • Spatial Data Types
  • File Table
  • Fulltext Indexes
  • Semantic Search
  • Service Broker
  • SQL Express Edition - LocalDB
  • Contained Databases
  • Metadata Discovery
  • SQL Server Integration Services

Day 2: SQL Server 2012 Administration

  • Extended Events
  • Columnstore Indexes
  • LOB Online Index Rebuilds
  • Adding Online Non-NULL Values
  • Custom Server Roles
  • Resource Governor
  • Database Recovery Advisor
  • Distributed Replay
  • Memory Management
  • Partitioned Tables
  • Troubleshooting Enhancements
  • Windows Server Core Support
  • Windows Server 8 & SQL Server 2012

Day 3: SQL Server 2012 High Availability

  • Failover Clustering Enhancements
    • Local TempDb
    • Health Check Policies
    • Failover Policy Levels
    • Indirect Checkpoints
  • AlwaysOn
    • Availability Groups
    • Availability Group Listeners
    • Monitoring & Troubleshooting
  • Multiple Secondaries
    • Automatic Failovers
    • Read-Only Connections
    • Backups

If you are interested in attending one of these events, don't hesitate and register at http://www.sqlpassion.at/events.html. There is also an Early-Bird price available until the end of this year.

BTW: if you have missed the news, Microsoft released a few hours ago the RC0 version of SQL Server 2012 – you can download the bits here: http://www.microsoft.com/download/en/details.aspx?id=28145

Thanks for reading!

-Klaus

Thursday, November 17, 2011 5:51:00 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Friday, November 04, 2011

Today I want to talk about a phenomenon regarding memory management in SQL Server. A few weeks ago I had a consulting customer where we made some SQL Server performance improvements. As a side note the customer asked me, why SQL Server isn't using as much memory as possible on their production system. Their database was about 500 GB, and when we looked into the Task Manager of Windows, we saw that SQL Server was just consuming a few hundred MBs:

In the first step this behavior of SQL Server was a little bit amazing, but the answer was found very fast, when we looked into the details of their production configuration. The problem was that the customer granted the Locked Pages in Memory privilege to the service account under which SQL Server was running. You can check if you have granted this privilege when you look into the current SQL Server Error Log. If you have granted that privilege, you can see following informational message during the startup of SQL Server:

In the first step of this posting I want to explain why and when you should use that privilege for SQL Server, and in the second step you will see, how SQL Server uses that privilege and why Task Manager is lying to you regarding the memory consumption.

Every time when the Windows OS gets into memory pressure, the Windows OS raises a so-called Memory Resource Notification Event to all processes that are currently running on the box (see http://msdn.microsoft.com/en-us/library/windows/desktop/aa366541(v=vs.85).aspx for the corresponding API function). SQL Server subscribes to this event and processes it internally through a component called the Resource Monitor. Additional information about the Resource Monitor component is reported through the Ring Buffer type RING_BUFFER_RESOURCE_MONITOR that is stored inside the DMV sys.dm_os_ring_buffers. When SQL Server receives the Memory Resource Notification Event, SQL Server must trim its internal caches, like the Buffer Pool, or the Plan Cache to get out of memory pressure. But there are some scenarios in which SQL Server reacts to slow to memory pressure. In that case the Windows OS will do a so-called Hard Working Set Trim, and pages the process (in our case SQL Server) out to the page file. The Windows OS just want to survive and get out of its memory pressure. Imagine that – the Buffer Pool, the Plan Cache – In-Memory buffers – are paged out to the page file! Accessing the Buffer Pool – our in-memory cache - means reading pages from the physical disk! You can imagine that the performance of SQL Server will decrease massively…

Another case when a Hard Working Set Trim can occur is, when you have device drivers that have bugs, or when the Windows OS has bugs that leads to Hard Working Set Trims. Under Windows Server 2003 there were several bugs reported that caused Hard Working Set Trims, like:

  • Copying large files from the SQL Server box
  • Establishing a Remote Desktop Connection to your SQL Server box

But how you can find out if your performance problems occur because of Hard Working Set Trims? When you are running a version of SQL Server prior to SQL Server 2005 SP2, you have to monitor the overall performance of your SQL Server instance, there are no messages or indications inside SQL Server that can tell you, if a Hard Working Set Trim degraded the performance of SQL Server. Beginning with SQL Server 2005 SP2 Microsoft has added an error message to the SQL Server Log, as soon as a Hard Working Set Trim occurred, like:

" A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 1086400, committed (KB): 2160928, memory utilization: 50%"

In such cases you can enable the Locked Pages in Memory privilege to get rid of this issue. In this case the Windows OS is not allowed to page out pages that SQL Server allocated for the Buffer Pool. Yes, you read correct: Locked Pages in Memory is only used for Buffer Pool allocations inside SQL Server!

But on the other hand you also have to investigate WHY a Hard Working Set Trim occurred on your system. A Hard Working Set Trim is just the result of another problem that you have on your Windows box. So you should find the root cause, and eliminate it, instead of using the shortcut (enabling Locked Pages in Memory) infinitely. I know a lot of DBAs who are using Locked Pages in Memory by default, and there are several pro and cons for this which I don't want to discuss here again. Glen Berry has a great article which describes more of those pros and cons (see http://sqlserverperformance.wordpress.com/2011/02/14/sql-server-and-the-lock-pages-in-memory-right-in-windows-server). One thing that I want to mention here again is the fact that you should limit the memory that SQL Server can allocate for the Buffer Pool when you use Locked Pages in Memory. You can limit the memory through the Max Memory Setting of your SQL Server instance.

By now you know when and how you can enable Locked Pages in Memory for your SQL Server instance. But why the heck Task Manager is reporting a wrong Working Set size when SQL Server is using that privilege. For this explanation we have to dig a little bit deeper into the Win32API. By default (without Locked Pages in Memory) SQL Server allocates memory for the Buffer Pool through the VirtualAlloc function of the Win32API (see http://msdn.microsoft.com/en-us/library/windows/desktop/aa366887(v=vs.85).aspx). But when the SQL Server service account has the Locked Pages in Memory privilege, SQL Server internally uses the AllocateUserPhysicalPages Win32API function (see http://msdn.microsoft.com/en-us/library/windows/desktop/aa366528(v=vs.85).aspx) to do Buffer Pool allocations. This function can be only called by a process, when the process has the SeLockMemoryPrivilege – in other words the Locked Pages in Memory privilege which is the user-friendly name. The Win32API function AllocateUserPhysicalPages is part of the Address Windowing Extensions API (AWE). Therefore those memory allocations can't be paged out by the Windows OS, because AWE memory regions are not page able by design. Those memory regions are just locked in memory, therefore the name of this privilege. When you have Locked Pages in Memory for your SQL Server service account enabled, it also means that you are using AWE indirectly – funny isn't it? As you can see from this explanation, Locked Pages in Memory is rather a Windows OS concept than a SQL Server concept. It has nothing to do directly with SQL Server. SQL Server is just a consumer of it.

With this basic knowledge in your hand, it is now very easy to explain why Task Manager doesn't show the correct Working Set of the SQL Server process: Task Manager is not reporting those memory allocations that are done through the Win32API function AllocateUserPhysicalPages – that's all about this phenomenon.

But how can you now find out, how much memory SQL Server is really using? There are several possibilities. Inside SQL Server you can use the DMV sys.dm_os_process_memory and the column physical_memory_in_use_kb. This returns you the physical memory that SQL Server is currently using including AWE memory allocations. If you want to have a more detailed breakdown of the memory consumption of SQL Server, you can use the DMV sys.dm_os_memory_clerks. A memory clerk is a component inside SQL Server, which tracks memory allocations for a specific component inside SQL Server. SQL Server gives you a memory clerks for each major component for each available NUMA node in your system. The column awe_allocated_kb shows you the AWE memory allocations in kb that were allocated by SQL Server through the Win32API function AllocateUserPhysicalPages.

Update:
Aaron Bertrand (see http://sqlblog.com/blogs/aaron_bertrand) mentioned that it would also make sense to reference a Performance Monitor counter to track the memory consumption of SQL Server. So here it is:

Outside of SQL Server you can use the Performance Monitor counter SQLServer:Memory Manager/Total Server Memory (KB) to track how large the Buffer Pool currently is.

As you have seen with this posting, memory management inside SQL Server is a really complicated topic, and we just have touched the tip of the iceberg. So don't trust Task Manager blindly regarding the memory consumption of SQL Server, you really have to know how SQL Server is configured to get the correct picture.

Thanks for reading

-Klaus

Friday, November 04, 2011 9:20:13 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [1] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Wednesday, November 02, 2011

On October 18, 2011 I have made unfair and incorrect words on Twitter, Facebook, LinkedIn, and Xing against the owners of SQLWorkshops.com. Because of this misbehavior of me, I got a so-called dissuasion letter from SQLWorkshops.com, which I have signed today, because I'm committing me now not to make such unfair and incorrect words any more in the future against SQLWorkshops.com.

I also want to take the chance and correct my unfair and incorrect statements of October 18, 2011. It was incorrect and wrong by me that I have blamed SQLWorkshops.com for the following things:

  • Unfair Business Conduct ("Some people are not playing fair")
  • Sending of threatening emails and letters ("They wrote me and Adam Machanic hard threating emails, because we were presenting on memory spills at sqlpass. At least I and Adam Machanic got a sqlsue email, because we have presented on memory spills at sqlpass.")
  • Organizing and running workshops of bad quality and of oversized prices ("They are charging horrible amounts for their workshops. Talked to some customers and they really suck. The attendees are not really amazed. Content is not really that bright…")
  • They have made pressure against me to remove my query memory spills demo from my various session downloads.

I apologize for any inconveniences that I have made with these unfair and incorrect statements.

-Klaus

Wednesday, November 02, 2011 4:16:15 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Wednesday, October 19, 2011

When you sometimes look at Execution Plans, you can see that the SELECT operator has sometimes a so-called Memory Grant assigned. This Memory Grant is specified in kilobytes and is needed for the query execution, when some operators (like Sort/Hash operators) in the Execution Plans need memory for execution – the so called Query Memory.

This query memory must be granted by SQL Server before the query is actually executed. The Query Optimizer uses the underlying Statistics to determine how much Query Memory must be acquired for a given query. The problem is now, when the Statistics are out-of-date, and SQL Server underestimates the processed rows. In this case, SQL Server will also request to less Query Memory for the given query. But when the query actually executes, the query can't resize its granted Query Memory, and can't just request more. The query must operate within the granted Query Memory. In this case, SQL Server has to spill the Sort/Hash-Operation into TempDb, which means that our very fast in-memory operation becomes a very slow physical On-Disk operation. SQL Server Profiler will report those Query Memory Spills through the events Sort Warnings and Hash Warning.

Unfortunately SQL Server 2008 (R2) provides you no events through Extended Events to track down those Memory Spills. In SQL Server 2012 this will change, and you will have additional events available inside Extended Events for troubleshooting this problem. In this posting I will illustrate you with a simple example how you can reproduce a simple Query Memory Spill because of out-of-date statistics. Let's create a new database and a simple test table inside it:

SET STATISTICS IO ON

SET STATISTICS TIME ON

GO

 

-- Create a new database

CREATE DATABASE InsufficientMemoryGrants

GO

 

SUE InsufficientMemoryGrants

GO

 

-- Create a test table

CREATE TABLE TestTable

(

Col1 INT IDENTITY PRIMARY KEY,

Col2 INT,

Col3 CHAR(4000)

)

GO

-- Create a Non-Clustered Index on column Col2

CREATE NONCLUSTERED INDEX idxTable1_Column2 ON TestTable(Col2)

GO

The table TestTable contains the primary key on the first column, and the second column is indexed through a Non-Clustered Index. The third column is a CHAR(4000) column which isn't indexed. We will use that column afterwards for an ORDER BY, so that the Query Optimizer must generate an explicit Sort Operator inside the Execution Plan. In the next step I'm just inserting 1500 records, where we have an even data distribution across all the values in the second column – each value exists once in our table.

With that test data prepared we can now execute a simple query, which must use a separate Sort operator in the Execution Plan:

DECLARE @x INT

 

SELECT @x = Col2 FROM TestTable

WHERE Col2 = 2

ORDER BY Col3

GO

 

This query uses the following Execution Plan:

When you look into SQL Server Profiler and you have enabled the above mentioned events, nothing happens. You can also use the DMV sys.dm_io_virtual_file_stats and the columns num_of_writes and num_of_bytes_written to find out if there was some activity in TempDb for a given query. This works – of course only – when you are the only person who currently uses the given SQL Server instance:

-- Check the activity in TempDb before we execute the sort operation.

SELECT num_of_writes, num_of_bytes_written FROM

sys.dm_io_virtual_file_stats(DB_ID('tempdb'), 1)

GO

 

-- Select a record through the previous created Non-Clustered Index from the table.

-- SQL Server retrieves the record through a Non-Clustered Index Seek operator.

-- SQL Server estimates for the sort operator 1 record, which also reflects

-- the actual number of rows.

-- SQL Server requests a memory grant of 1024kb - the sorting is done inside

-- the memory.

DECLARE @x INT

 

SELECT @x = Col2 FROM TestTable

WHERE Col2 = 2

ORDER BY Col3

GO

 

-- Check the activity in TempDb after the execution of the sort operation.

-- There was no activity in TempDb during the previous SELECT statement.

SELECT num_of_writes, num_of_bytes_written FROM

sys.dm_io_virtual_file_stats(DB_ID('tempdb'), 1)

GO

Again you will see no activity in TempDb, which means the output from sys.dm_io_virtual_file_stats is the same before and after executing the query. The query takes on my system around 1ms of execution time.

Now we have a table with 1500 records, means that our table needs 20% + 500 rows of data changes so that SQL Server will update the statistics. If you're doing the math, we need 800 data modifications in that table (500 + 300). So let's just insert 799 additional rows where the value of the second column is 2. We are just changing the data distribution and SQL Server WILL NOT update the statistics, because one additional data change is still missing, until Update Statistics is triggered automatically inside SQL Server!

-- Insert 799 records into table TestTable

SELECT TOP 799 IDENTITY(INT, 1, 1) AS n INTO #Nums

FROM

master.dbo.syscolumns sc1

 

INSERT INTO TestTable (Col2, Col3)

SELECT 2, REPLICATE('x', 4000) FROM #nums

DROP TABLE #nums

GO

When you now execute the same query again, SQL Server will now spill the Sort operation to TempDb, because SQL Server will only request a Query Memory Grant of 1024 kilobytes, which is estimated for just 1 record – the memory grant has the same size as before:

-- Check the activity in TempDb before we execute the sort operation.

SELECT num_of_writes, num_of_bytes_written FROM

sys.dm_io_virtual_file_stats(DB_ID('tempdb'), 1)

GO

 

-- SQL Server estimates now 1 record for the sort operation and requests a memory grant of 1.024kb for the query.

-- This is too less, because actually we are sorting 800 rows!

-- SQL Server has to spill the sort operation into TempDb, which now becomes a physical I/O operation!!!

DECLARE @x INT

 

SELECT @x = Col2 FROM TestTable

WHERE Col2 = 2

ORDER BY Col3

GO

 

-- Check the activity in TempDb after the execution of the sort operation.

-- There is now activity in TempDb during the previous SELECT statement.

SELECT num_of_writes, num_of_bytes_written FROM

sys.dm_io_virtual_file_stats(DB_ID('tempdb'), 1)

GO

If you check the Estimated Number of Rows in the Execution Plan, they are differing completely from the Actual Number of Rows:

When you track the query execution time you will also see that the execution time increased – in my case it increased up to 200ms, which is a huge difference to the earlier execution time of just 1ms! The DMV sys.dm_io_virtual_file_stats will also report some activity inside TempDb, which is also the evidence that SQL Server spilled the Sort operation into TempDb! SQL Server Profiler will also show you a Sort Warning event.

If you now insert one additional record, and you run the query again, everything is fine, because SQL Server will trigger the Statistics Update and estimate the Query Memory Grant correctly:

-- Insert 1 records into table TestTable

SELECT TOP 1 IDENTITY(INT, 1, 1) AS n INTO #Nums

FROM

master.dbo.syscolumns sc1

 

INSERT INTO TestTable (Col2, Col3)

SELECT 2, REPLICATE('x', 2000) FROM #nums

DROP TABLE #nums

GO

 

-- Check the activity in TempDb before we execute the sort operation.

SELECT num_of_writes, num_of_bytes_written FROM sys.dm_io_virtual_file_stats(DB_ID('tempdb'), 1)

GO

 

-- SQL Server has now accurate statistics and estimates 801 rows for the sort operator.

-- SQL Server requests a memory grant of 6.656kb, which is now enough.

-- SQL Server now spills the sort operation not to TempDb.

-- Logical reads: 577

DECLARE @x INT

 

SELECT @x = Col2 FROM TestTable

WHERE Col2 = 2

ORDER BY Col3

GO

 

-- Check the activity in TempDb after the execution of the sort operation.

-- There is now no activity in TempDb during the previous SELECT statement.

SELECT num_of_writes, num_of_bytes_written FROM sys.dm_io_virtual_file_stats(DB_ID('tempdb'), 1)

GO

So this is a very basic example which shows you how you can reproduce Sort Warnings inside SQL Server – not really a magic. Adam Machanic (http://sqlblog.com/blogs/adam_machanic) has done last week at the SQLPASS Summit in Seattle a whole session about Query Memory at a 500 level, where he went into more details on this complicated topic, especially in combination with Parallel Execution Plans.

Thanks for reading!

-Klaus

Wednesday, October 19, 2011 9:04:35 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Friday, October 14, 2011

As I have announced in my "Advanced SQL Server Troubleshooting" session at SQLPASS today, you can find here the slides & samples for download. Thanks for attending my session J

-Klaus

Friday, October 14, 2011 6:23:04 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Tuesday, October 04, 2011

Sie wollen SQL Server Abfragen um 100% oder gar 1000% beschleunigt haben? Gleichzeitig wollen Sie Hardware– und Lizenzkosten Ihrer SQL Server Anwendungen und deren Infrastruktur senken? Ein Wunschdenken? - Keineswegs!

 

Mit einer gut indizierten SQL Server Datenbank können Sie Geschwindigkeitsvorteile von mehreren 100% für bestimmte Abfragen gewinnen. Als positiven Seiteneffekt senken Sie die Hardwareanforderungen an Ihre SQL Server Infrastruktur und dadurch direkt die Hardware– und Lizenzkosten, die für SQL Server Installation anfallen.

 

Am 18. Jänner 2012 ist es endlich soweit:

Klaus Aschenbrenner – unabhängigier SQL Server Experte und internationaler Konferenzsprecher – führt den SQL Server Indexing Day in Wien durch.

In 1 intensiven Tag vermittelt Ihnen Klaus Aschenbrenner das notwendige Know-How, um Indizes im SQL Server effektiv einsetzen zu können – wie oben genannt – Performance Optimierungen von mehreren 100% durchführen zu können.

In diesem intensiven Workshop-Tag werden Sie im ersten Schritt den Aufbau von SQL Server Datenbanken und der verschiedenen zur Verfügung stehenden Indizes näher kennenlernen. Aufbauend auf diesem Wissen werden Sie eine Reihe von unterschiedlichen Performance Tuning Techniken näher kennenlernen, die Sie durch den Einsatz des jeweiligen Indexes einsetzen können. Abgerundet wird der Tag mit einem Ausblick auf die Index-Wartung, und über welche Fallstricke Sie hier in Produktionsumgebungen stolpern können.

 

Inhalte:

  • SQL Server 2008 Database Internals
    • Database Structure
    • Table Metadata
    • Data Page Details
    • Record Storage
  • Index Architecture
    • Index Architecture
    • Index Structures
    • Clustered vs. Non-Clustered Indexes
    • Index Dependencies
    • Clustered Key Problems
  • Index Tuning
    • Search Arguments
    • Index Access Methods
    • Covering Index
    • Tipping Point
    • Index Intersection
    • Filtered Indexes
    • Indexed Views
  • Index Maintenance
    • Statistics
    • Fragmentation
    • Index Rebuild
    • Index Reorganize

 

Weitere Informationen zum Event können Sie sich unter http://SQLpassion.at/Events.html ansehen, bzw. können Sie den dazugehörigen Folder unter http://SQLPassion.at/IndexingDay.pdf herunterladen.

 

Veranstaltungsort:

Hotel & Palais Strudlhof

Pasteurgasse 1

A-1090 Wien

http://www.strudlhof.at

 

Inkludierte Leistungen:

  • Workshop von 09:00 - 17:00
  • 2 Kaffeepausen (Vormittag, Nachmittag)
  • Gemeinsames Mittagessen
  • Early-Bird Preis bis zum 31.10.2011: € 349,00 exkl Ust.
  • Danach: € 399,00 exkl Ust.

 

Anmeldung:

  • Anmeldungen werden unter http://SQLpassion.at/Events.html entgegengenommen.
  • Ausgestellte Rechungen müssen bis zum Beginn der Veranstaltung einbezahlt werden, damit eine Teilnahme an der Veranstaltung gewährleistet werden kann.

 

-Klaus

Tuesday, October 04, 2011 8:19:56 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer
 Sunday, October 02, 2011

As I have announced in all of my sessions at the SQLbits conferences in Liverpool/UK, you can find here the Slides & Samples for download. Enjoy it and thanks for attending my sessions. J

-Klaus

Sunday, October 02, 2011 7:12:18 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [1] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Thursday, September 29, 2011

As I have announced in all of my sessions last week in Budapest at the SolidQ summit, you can find here the Slides & Samples for download. Enjoy it and thanks for attending my sessions J

-Klaus

Thursday, September 29, 2011 7:47:19 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia

As I have announced in all of my sessions this week in Rosenheim/Germany at the SQLdays conference can find here the Slides & Samples for download. Enjoy it and thanks for attending my sessions J

-Klaus

Thursday, September 29, 2011 7:46:39 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer
 Friday, August 26, 2011

Today we covered the topics Full Text Search, Change Data Capture, Change Tracking, and Service Broker. I have taken no notes on Service Broker, because I have well documented that topic a few years ago here J.

Full Text Search

  • Fulltext Index is changed automatically in the background (by default)
  • Fulltext Catalog is a container for Fulltext Indexes
  • sys.dm_fts_memory_buffers
  • sys.dm_fts_memory_pools
  • sys.dm_fts_parser

 

CDC/Change Tracking

  • CDC can use the Transactional Replication Log Reader Job
  • Sparse Columns are not supported when used in a Column Set
  • Computed Columns are not supported
  • Individual XML elements are not tracked
  • 2 Capture instances are supported per table
  • KEEP_CDC option when you restore/attach CDC database backup on a Enterprise Edition

 

Tomorrow is the last day, where all is about Powershell. But I'm doing tomorrow nothing regarding the training, because I'm trying the SQLMCM Knowledge Exam in the afternoon, and want to have a long sleep with a fresh mind. I'm not expecting to pass the Knowledge Exam on the first try, but at least I know afterwards how hard it is really, and which topics I must study more, and to which level.

With this input I can also recalibrate my studying, because after 3 weeks of SQLskills trainings, it is really hard to find the right level – you can talk with Paul about the actual source code implementation of some components inside SQL Server. But is that really the level to which you have to know it? Tomorrow afternoon I know a little bit more about it…

Thanks for reading

-Klaus

Friday, August 26, 2011 2:06:25 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Thursday, August 25, 2011

Today Bob spoke about Auditing, SQLCLR, XML, and Spatial Data. Because I already know these concepts very well, my study notes for today are very sparse.

Auditing

  • SQL Trace has too much drawbacks from Auditing
    • Separate program
  • Column Level GRANT overrides a DENY
  • Auditing audits changes to Auditing
  • Auditing Targets can't be shared
  • Auditing uses Extended Events in the background
  • You always need to do a CREATE SERVER AUDIT
    • Defines the target
    • Defines what to do when the audit is not available
    • QUEUE_DELAY = 0
      • Synchronous auditing without data loss

 

SQLCLR

  • SQLCLR is always loaded, because it is internally used
    • Spatial, HierarchyID data types
  • Only for functions
    • WITH RETURNS NULL ON NULL INPUT
    • If you can't change the .NET code to use nullable types
  • SQLCLR uses the Multi Page Allocator
    • Uses memory outside the Buffer Pool
    • "MemToLeave" area, can be controlled through the "-g" startup parameter on x32
  • SQLCLR is not controlled by Max Server Memory
    • So you need to set Max Server Memory, so that SQLCLR also has some memory available
  • You get for each owner of an assembly per database an AppDomain
  • SQL Server Log shows which AppDomains are loaded
    • DDL AppDomain
      • For Assembly Verification during startup
    • Runtime AppDomain
      • For executing SQLCLR code
    • sys.dm_clr_appdomains
  • SQL Server calls the .NET GC, when memory pressure occurs
  • sys.dm_clr_tasks
    • forced_yield_count
  • SQL Server creates invisible assemblies, when you call one assembly from another assembly
    • The dependent assembly is invisible
    • You can't register .NET code in an invisible assembly
    • You have to make that assembly visible by ALTER ASSEMBLY
    • Dependent assemblies are automatically dropped when the "root" assembly is dropped
    • sys.assembly_references
  • sys.dm_exec_query_stats
    • clr_time
  • When you execute SQL code in SQLCLR, it's dynamic TSQL Code
    • This breaks Ownership Chaining
    • Use EXECUTE AS OWNER instead

 

Thanks for reading

-Klaus

Thursday, August 25, 2011 3:11:09 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Wednesday, August 24, 2011

Today Bob spoke the whole day about securing SQL Server, security itself, and encrypting data. It was really hard content, and sometimes it was really hard to follow, because of too much PowerPoint slides. I already miss Paul's whiteboard drawings… ;-) Here are my study notes.

SQL Server Setup

  • SQL Server VSS Writer
    • Needed for 3rd party backup products
  • When you change the SQL Server service account password, you don't have to restart SQL Server
  • When you change the service account through SQL Server Configuration Manager, the Configuration Manager will put the new user in the appropriate group
    • Permissions are granted on the group level, never on the user level
    • Service Master Key is also re-encrypted through the Configuration Manager
    • Registry permissions are also granted on the group level, instead of the account level
  • NETWORK SERVICE exists only once on a computer
    • SQL Server would be shared with other applications, when they are also run under NETWORK SERVICE
  • http://sqlskills.com/BLOGS/BOBB/post/About-SQL-Servers-usage-of-Service-SIDs.aspx
  • Permissions are assigned to the Service SID of SQL Server
  • Service SIDs can't be used for Clustering
  • Clustering needs Domain User Accounts
  • http://download.microsoft.com/download/1/2/A/12ABE102-4427-4335-B989-5DA579A4D29D/SQL_Server_2008_R2_Security_Best_Practice_Whitepaper.docx
  • SQL Browser Service
  • When SQL Server Agent Job is owned by sa
    • T-SQL steps are running as sysadmin
    • Non T-SQL steps are running as agent Service Account
      • You need the appropriate permission on the Agent Service Account, which is bad, when you need a l ot of different permissions
  • When SQL Server Agent Job is NOT owned by sa
    • T-SQL steps
      • Agent logs into SQL Server
      • Uses EXECUTE AS WITH OWNER
    • Non SQL steps
      • Runs as SQL Agent Proxy
      • Create Credentials
        • The Credential gets the permissions from the configured identity
        • You have to change the credential when the password of the identity changes!
        • Credential needs the permission "Log on as a batch job" through secpol.msc
      • Create Proxy over Credential
        • Proxy is the security context for the SQL Server Agent Job Step
        • Proxy accesses the permissions from the configured identity, that is attached to the proxy account
  • Kerberos needs a SPN (Service Principal Name) in the Active Directory
    • Format: MSSQLSvc/server1:1433

 

Authentication/Authorization

  • Guest account can't be deleted, only deactivated
  • sys.tables/principal_id shows the owner of the table
  • sp_adduser should not be used any more
    • Use CREATE USER instead
    • sp_adduser creates a schema which is owned by the newly created user
  • Application Roles
  • MIsmatched SIDs
    • sp_change_user_login
  • TRUSTWORTHY property
    • Does the sysadmin trust the DBO?
  • fn_my_permissions()
  • sys.fn_builtin_permissions()
  • Windows Groups can't have a default schema
    • A user can be in more than one group, which default schema from which group should be associated with the user?
    • The last added group (the login with the highest login_id) is used for default language/default database
  • SQL Server executes stored procedures as CALLER
  • Dynamic T-SQL breaks the Ownership-Chain!
  • When the owner of the stored procedure is the same as the owner of the tables that are accessed, permissions are not checked
  • The Owership Chain overrides a DENY
  • Database Master Key is always encrypted with TRIPLE_DES
    • The same with the Service Master Key
  • Service Master Keys are used to encrypt
    • Database Master Keys
    • Linked Server passwords
    • Credentials
  • Service Master Key is encrypted by
    • DPAPI and Service Account
      • Needed for Cluster Failovers (the Service Account is on each node the same)
    • DPAPI and Local Machine Key
  • Service Master Key is generated the first time, when SQL Server is started after installation
    • Therefore you can clone an installation
  • You can regenerate the Service Master Key with the startup option "-K"
  • Database Master Key can the optionally protected by the Service Master Key
    • You don't need a password for opening the Database Master Key
  • When you backup a database (and therefore the Database Master Key) and restore it on another instance, you will loose the encryption by the Service Master Key
    • Therefore you have the option to open the Database Master Key through the provided password which is necessary
    • After you have opened the Database Master Key by password, you can add the encryption by the Service Master Key
  • When you want to encrypt the Database Master Key by the Service Master Key, you have to supply the password that is used to encrypt the Database Master Key
  • TempDb is also encrypted when you enable Transparent Database Encryption for a user database

 

Thanks for reading

-Klaus

Wednesday, August 24, 2011 1:19:48 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Tuesday, August 23, 2011

The whole last 3 days I've spent almost every minute with reviewing the material from the last 2 weeks (around 38 hours in total…). Today Bob Beauchemin joined us, and talks the whole week about SQL Server Development, Security, PowerShell, and some esoteric technologies like SQLCLR, Service Broker, and CDC/Change Tracking.

Don't expect too much notes from this week, because I know a lot of those things already J

Module 1: Optimizing Procedural Code

  • Implicit Conversation leads to Clustered Index Scan
    • Seen in the predicate of the Scan Operator in the Execution Plan
    • Unicode <> Non Unique Conversion
    • Entity Framework v1 needs Unicode for that reason in the database
  • Constant Scan
    • One Column, One Row RowSet
  • Index over a computed column leads to a persisted computed column
  • Query Compilation
    • Phase 0
      • Initializes the Query Optimizer
      • Query cost <= 0.2 will take the plan for execution
    • Phase 1
    • Phase 2
      • Clock runs until timeout is occurred
        • See "Timeout" in Execution Plan
  • Hash Join is used when you have no indexes/keys on the table
  • When you have a key/index on at least one table, a nested loop join is used
  • Each query operator is COM object
  • Bitmap IN ROW optimization
  • Correlated sub query implies Nested Loop operator
  • Samples are used when Auto Create and Auto Update Statistics is used
    • Depends on the number of pages, around 20% - 30% are used
  • Service Broker queues have no statistics
    • The queues are changing too frequently, so it doesn't make sense to maintain statistics on them
  • Density Vector returns the number of distinct rows
  • Filtered Indexes/Filtered Statistics are rebuild based on ALL rows, not the filtered rows
  • sys.dm_os_memory_cache_entries
    • original_cost
    • current_cost
  • DBCC FLUSHPROCINDB(db_id)
  • DBCC USEROPTIONS shows the SET and all the other session options
    • user_id = default schema id
  • Disable SET ARITHABORT option in SSMS
    • Every client that connects to SQL Server has this option also disabled
    • If you try to find out, why a query is slow from an application server or other user, you will get within SSMS a new execution plan, because ARITABORT is different
    • Therefore the execution plan is compiled, and you get an execution plan for the current supplied parameters
    • Therefore you can't reproduce a parameter sniffing problem within SSMS when ARITABORT is enabled!
  • GROUP BY/HAVING clause
    • Query will never get parametrized
    • Also not, when FORCED parameterization is enabled on the database
  • When you need FORCED parameterization on query level
    • Use Plan Guides
  • Halloween Protection
    • Eager Spool is a Stop-And-Go Operator
    • Lazy Spool is a Pass-Through Operator
    • E.g. When you're updating a CI in a table
  • Table Valued Function
  • Inline Statement Table Valued Function
    • Gets a Parse Tree (cacheobjtype), View (objtype) in sys.dm_exec_cached_plans
    • Get no record in sys.dm_exec_query_stats
    • You get only a record in sys.dm_exec_query_stats for the statement, that is calling the Inline Statement Table Valued Function
  • Multiple Statement Table Valued Function
    • Gets a Compiled Plan (cacheobjtype), Proc(objtype) in sys.dm_exec_cached_plans

 

Thanks for reading

-Klaus

Tuesday, August 23, 2011 1:56:11 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [2] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Sunday, August 21, 2011

As you might know, I'm running my "Advanced SQL Server Performance Troubleshooting Workshop" from September 12 – 14 in Central London. You can find out further information about the detailed agenda here: http://csharp.at/Registration_UK.aspx

Next week you have the amazing possibility to win a free seat in that workshop! It's very easy: Just register as the first person throughout this week (August 21 – August 26) for the workshop and get an additional seat for one of your colleagues for free!

Here are the exact eligibility requirements to get the free seat:

  • You have to be the FIRST person who registers for my Performance Troubleshooting Workshop in London, during the week from August 21 – August 26.
  • You have to use the discount code TWO4ONE during the registration.
  • You have to register the second person also through the discount code TWO4ONE.
  • Both registrations must have the same invoice address.
  • This offer is only available for persons/companies who haven't yet registered an attendee for the workshop.
  • Everyone else who registers throughout the week from August 21 – August 26 with the discount code TWO4ONE, and has not won the free seat, receives a 5% discount of the original price of GBP 1,290.
  • The 5% discount does not apply to the first person who wins the additional seat for the workshop.
  • The registrations have to be done through the registration site available on http://csharp.at/Registration_UK.aspx

So let's be very fast, and register for my upcoming workshop in London, and if you are the first one, you will get an additional seat for free!

See you soon in London J

-Klaus

Sunday, August 21, 2011 6:12:12 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Friday, August 19, 2011

Today Jonathan presented on Replication and Paul about Database Snapshots, and his baby called "CHECKDB" – he has been married with CHECKDB for almost 5 years at Microsoft.

Module 8: Replication

  • Distributes data to different locations
  • Offloading reporting to another database
  • Transactional Replication
    • Used in server-to-server scenarios that require high throughput
    • Different Agents
      • Snapshot Agent
      • Log Reader Agent
        • Is also used by CDC & Change Data Capture
        • See log_reuse_wait_desc column in sys.database
        • Only committed transactions are copied to the Distribution Database
      • Distribution Agent
        • Runs on the Distributor for Push Subscriptions
        • Runs on the Subscriber for Pull Subscriptions
        • Copies transactions from the Distribution Databases to the Subscriber Databases
    • Peer-to-Peer Replication maintans copies of data across multiple server
      • If you enable it, you can't go back!
      • P2P Replication must be set per publication
  • Merge Replication
    • Primarily for mobile and distributed server that have possible data conflicts
    • Starts with a snapshot
    • Incremential changes for data and schema are tracked with triggers
    • Conflict Detection
    • POS (Point Of Sale) appliations
    • Different Agents
      • Snapshot Agent
      • Merge Agent
        • Applies initial snapshots to subscribers
        • Merges incremential changes
        • Detects and resolve conflicts
          • Priority based - highest priority wins
          • SQLCLR/COM- based on complex business rules
    • Only the final changes to the data are applied
      • E.g. multiple Updates
      • Net changes are tracked at publisher and subscriber are merged periodically with conflict detection
    • Needs planning for TempDb & VersionStore
      • Depends on the number of articles
  • Snapshot Replication
    • You can a snapshot of the data delivered to the subscription
    • Can be used as a preparation for Transactional- and Merge Replication
      • For large databases a backup would be a better option
      • You can also use Bulk Copy the initial data
    • Snapshot takes locks when the snapshot is generated
      • Shared locks on the table are acquired
      • RCSI is not supported
  • Distribution database is needed, because there can be several subscribers
    • When you make changes in the Distribution Database, you are not supported by Microsoft
      • Like Indexing
    • Large Distribution Databases should be moved to its own server
  • SQL Server uses Table Scans inside the Distribution database, which can perform badly when the distribution database gets larger and large
    • You can set the retention period
  • Updatable Subscriptions
    • Allows subscribers to replicate changes back to the publisher
  • Database Mirroring & Replication
    • Publisher: Full Support
    • Subscriber. Limited Support
    • Distributor: No Support
      • Failover Clustering is the only High Availability option
  • Failover Clustering & Replication
    • Supported on each Replication role (Publisher, Subscriber, Distributor)
  • Replication Monitor
    • Provides health about the Replication topology
  • Tracer Token
    • Allows you to measure latency

 

Module 9: Database Snapshots

  • Consistent point of view of database
  • Can be created on a mirror to access database
  • Sparse file as a mapping- and data area
  • SQL Server is pushing 8kb once a time into the snapshot, not Extents
  • Once a page is pushed in the snapshot, it is never pushed again into the snapshot
  • Buffer Pool has an in-memory map which pages are in the snapshot and which are not
    • The first time when the snapshot is accessed the in-memory map is generated
  • When the database is grown, the new pages are never in the snapshot, because they never existed in the snapshot when the database was created
  • When the original page is pushed into the snapshot, the page is latched (the BUF_LATCH structure)
  • 3 different Snapshots of a database means 3 synchronous writes when a page gets updated
    • The original page must be pushed synchronously in each of the 3 snapshots
  • Snapshot on a Snapshot will not work
  • The snapshot stores its own copy of a page in the Buffer Pool, when the page is read
    • This can lead to memory pressure in the Buffer Pool
  • When there are open transactions during the creation of the snapshot
    • Crash Recovery is of the source database is run into the snaphot
    • E.g. When a transaction is active, a rollback of this transaction is occuring in the context of the snapshot
  • When you create a snapshot on a mirror, the consistent point of time of the snapshot is the time, when the last CHECKPOINT operation occured on the mirror
  • First step is a CHECKPOINT operation, you will not get in the snapshot the following:
    • All transactions that have comitted AFTER the CHECKPOINT operation, they are rollbacked
    • All transactions that were running at the CHECKPOINT operation, and were not committed at the time the CHECKPOINT operation occured
  • FILESTREAM file group can't be included in a snapshot, but it does not prevent creating the snapshot
    • But you can't REVERT the snapshot, if there is a FILESTREAM file group
  • Snapshot goes suspect, when there is no more space for the snapshot
    • Source database is un-effected, and snapshot can't be used anymore
  • You can't detach or restore the source code, when there is a snapshot defined for that database
  • http://blogs.msdn.com/b/psssql/archive/2009/03/04/sparse-file-errors-1450-or-665-due-to-file-fragmentation-fixes-and-workarounds.aspx
  • sys.databases/source_database_id IS NOT NULL return all Snapshots
  • When you begin a transaction and finally rollback the transaction, the changed pages from that transaction stays in the snapshot
  • REVERTing a snapshot sets the log file to 0,5MB and 2 VLFs
  • Database Snapshot Performance Considerations under I/O Intensive Workloads

 

Module 10: Corruption Detection and Recovery

  • I/O Errors
    • 823: Hard I/O error
      • OS can't read data from disk
    • 824 :Soft I/O error
      • Page Checksum failure
      • Torn Page Detection
        • Bits are corrected as soon as the pages are read into the Buffer Pool
      • Wrong PageID
    • 825: Read-Retry Error
    • Logged in msdb.suspect_pages
  • Page Protection options doesn't protect you
    • They just detect corruption
  • Page Checksum is stored in the Page Header
  • When Page Checksum is enabled, nothing is done
    • A page is only checksumed, when the page gets dirty
    • Not available for TempDb since SQL Server 2008
      • You have to enable Checksum explictely on TempDb when upgrading from SQL Server 2005 to SQL Server 2008
  • Automatic Page Repair is available in both Standard and Enterprise Editions
  • CHECKDB doesn't take any locks
  • Last Known Good (last time when CHECKDB run without any problems) is reported in the SQL Server Error Log, when you start SQL Server
  • EXTENDEND_LOGICAL_ACCESS
    • Indexed Views
    • XML Indexes
    • Spatial Indexes
  • Statistics Blobs are not checked
  • Repair can break foreign-key constraints
  • VLDBs
    • DBCC CHECKFILEGROUP
      • E.g. One partition per each night
  • You can run CHECKTABLE on the system tables
  • REPAIR_REBUILD option need single user mode
  • TABLERESULTS
    • Returns the output as a table
    • Undocumented, because the output can change from release to release
  • Online Index Rebuild reads the old index during the rebuild
    • Offline Index Rebuild also reads almost every time the old index during the rebuild
    • You have to drop and recreate the NCI
    • It could be problematic if the NCI enforces a constraint, in the mean time when the NCI is dropped, users can insert data that is not enforced by the NCI, and afterwards you can't recreate the NCI
  • DBCC CHECKDB can be run on a suspect database
    • Suspect means that recovery started, but couldn't be completed, so it is not transactional consistent
    • But you must put it in EMERGENCY mode
  • Not all pages can be single page restored (because not all operations on them are fully logged)
    • Boot page
    • Fileheader page
    • Allocation bitmap (not including IAM pages)
    • Certain pages in hidden, critical system catalogs
    • Logged in msdb.suspect_pages
    • Up to 100 pages can be restored during a Single Page Restore
    • Online Single Page Restore is an Enterprise feature
    • If you have subsequent log backups, they must be also restored
      • You also need to do a tail-log backup and restore it also
    • And the log system knows that only log records for the specific page must be replayed/rollbacked
  • Allocation System belongs to Page-ID 99
  • Repair is going to delete data!
  • Repair is always offline
  • When you repair a Replication, you must re-initialize the Subscriptions
    • Repair is physically, Replication is logically
  • Msg 8921 when TempDb run out of space
  • Do not try to repair system tables!!!
  • Emergency Mode for rebuilding the transaction log
  • XVI32 Hex Editor ;-)
  • Damaged PFS page
    • Allocation Order Scan uses the PFS page
      • E.g. SELECT * FROM TableA
    • You can retrieve the data, even when the PFS page is damaged, by using an Clustered Index Scan by ordering by the Clustered Key, or using an index hint that forces an Clustered Index Scan
  • A suspect or recovery pending database can't be detached on SQL Server 2008, because it can't be re-attached any more...
    • When you enforce it, it can be detached
    • To attach it again
      • Create a new database with the SAME log
      • Set the database offline
      • Delete the MDF/LDF file
      • Copy the MDF/LDF file from the detached database
      • Set the database online
      • Database is again in the SUSPECT state
  • ATTACH_REBUILD_LOG

 

Thanks for reading and stay tuned for the last week J

-Klaus

Friday, August 19, 2011 1:32:44 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Thursday, August 18, 2011

Today Paul was speaking about Database Mirroring and Jonathan was talking about Failover Clustering – all in all a very intensive day J

Module 6: Database Mirroring

 

Module 7: Failover Clustering

  • Preferred owner configuration defines on which node a SQL Server can run
  • Cluster Validation Tests offline the shared cluster disks
    • You have to plan offline time
  • You need a current Cluster Validation Test Report for Microsoft Product Support Services to get help
    • Rerun Validation Tests, as soon as you add a new node to the cluster
  • Only the active nodes have to be licensed
    • The node with the most CPUs defines how many CPUs you have to license when you use a CPU based license
  • You need on odd numbe of votes to form a Quorum
  • Not enable Large Pages, when 2 instances can be run on one node
    • The whole buffer pool must be allocated during startup phase of SQL Server
  • SCSI-3 Persistent Reserveration must be enabled on the LUN level in the SAN
    • It's normally not enabled by default
    • It's needed for the shared disks in the cluster
  • TempDb is currently not supported on a local disk in a cluster
    • SQL Server Denali will support it
    • You can't use currently SSDs als local disk for TempDb
  • Network Binding Order must be set with multiple NICs
  • MSDTC is only needed, when you need distributed transactions
    • MSDTC is installed as a cluster resource
      • MSDTC disk could be mounted on another cluster node
    • MSDTC should be in the same resource group als SQL Server
      • MSDTC can fail together with SQL Server
      • Otherwise MSDTC could get a bottleneck
  • You can have a separate MSDTC instance per SQL Server instance
  • Slipstreaming
  • Failback
    • Should be only configured, when the new failover node has less resources as the old one
    • Otherwise a failback occurs automatically as soon as the old node gets online
  • You need Disk Dependencies if you're using Mount Points
  • Virtualization doesn't provide you High Availability during Patching
  • Rolling Patches/Upgrades
    • Go to the SQL Server Instance Properties inside Cluster Manager (for each SQL Server Instance)
    • Advanced Policies Tab
    • Remove the Possible Owner who you are currently patching
    • The Instance is taken offline/online during Patching, therefore those steps are needed to be done
      • Patching node must be removed from the possible owners
    • After one instance is patched
      • Fail over to the patched instance, after allow it as a possible owner
      • Remove possible owner from the unpatched instance
      • Patch the unpatched instance

 

Thanks for reading

-Klaus

Thursday, August 18, 2011 2:56:30 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Wednesday, August 17, 2011

Today Jonathan was talking the whole day about Consolidation and Virtualization. There were again a lot of new concepts, and new things to learn.

Module 4: Consolidation

  • Event Notifications for Monitoring
    • Deadlocks, Locking/Blocking Scenarios
  • Multiple Instances for TempDb bottleneck
  • Soft-NUMA should be used to bound multiple instances to dedicated CPUs
    • CPU Affinity Maks should not be used, because they are not supported anymore in SQL Server Denali
    • CPUs can be only taken from the local CPU
      • there is no cross CPU exchange
      • Soft NUMA nodes can't be crossed
      • only local memory access
      • Improves performance
    • TCP ports can be bound to Soft NUMA instances
  • Multiple concurrent Backups can lead to Buffer Pool Contention
  • Multiple instances when you have high concurrent workloads and not enough worker threads
    • Number of worker threads is bound to the instance level
  • SQL Server 2008 R2 will report if you run on a Hypervisor
  • Detach, Copy, Attach
    • Maybe you're copying free space over the network
  • Raw Device Mapping (RDM)
  • Migrate Databases through Database Mirroring/Log Shipping
  • On-the-Fly VHD file migration
    • Put everything on a VHD
      • Including master database etc.
    • Move the VHD file from one VM to another VM
  • There were no providers for 64bit Excel/Access, you can use the following workaround
    • Install SQL Express x32
    • Linked Server from SQL Server x64 to SQL Express x32
    • Linked server from SQL Express x32 to Excel/Access
  • Multiple Instances because of security issues
    • Each database needs sysadmin/securityadmin role
    • Put each database on its own instance
  • Virtual Machine Failover Cluster for Patching SQL Server Instances
    • Patch the Passive Node
    • Fail over
    • Patch the other Node
    • Fail back (if needed)
  • The total of min server memory should be smaller than the total amount of physical memory available
  • Max server memory is ALWAYS preferred for multiple instances
  • Memory\Available MBs > 150-300MBs
  • Thread Pool Starvation
    • Not too much worker threads are available
    • E.g.
      • Query runs with MAXDOP 4 across 100 different connections
      • Each query needs 9 worker threads (4 producer threads, 4 consumer threads, 1 coordinator thread)
      • These are almost 900 concurrent threads
      • Queries can timeout, because this amount of worker threads is not available once a time, see
        • select max_workers_count from sys.dm_os_sys_info
  • SQL Server Consolidation at Microsoft

 

Module 5: Virtualization

 

Thanks for reading

-Klaus

Wednesday, August 17, 2011 2:12:20 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Tuesday, August 16, 2011

Today Paul talked the whole day about HA DR Strategies and Backup/Restore operations. I've already known a lot about Backup/Restores, but Paul showed some cool things that were even new to me J. Here are my study notes for the 3 modules of today:

Module 1: HA DR Strategies

  • Zero downtime is not possible
    • Even not mit Live Migration
  • Failover Clustering
    • Server is protected
    • Data is not protected
  • RPO - Recovery Point Objective
    • Maximum allowable data-loss
    • Zero data-loss is possible through synchronous Database Mirroring or synchronous SAN replication
  • What is the transaction log generation rate of your workload?
    • Impacts
      • Database Mirroring
      • Log Shipping
      • Replication
      • Log File Size
  • Recovery Model
    • Database Mirroring needs FULL
    • Log shipping works with FULL and BULKLOGGED

 

Module 2: Backups

  • Don't plan a backup strategy, plan a restore strategy!!!
  • When a Full Database Backup starts, a CHECKPOINT occurs
    • CHECKPOINT generates log records
  • Concurrent Full Backups and Tx Log Backups are possible
    • Log Clearing from the Tx Log Backup is deferred until the concurrent Full Backup is completed
  • DBCC SQLPERF (LOGSPACE)
  • Only a log backup clears the transaction log in the FULL recovery model
  • Reverting from a database snapshot breaks the backup chain
  • While a log backup is running you can't do a minimally logged operation in the bulk logged recover model
    • The ML bitmap mask can't be changed in the mean time
  • Tail Log backup in the bulk logged recovery model also needs the data files (needs to backup the changed extents)
    • They must be accessible, not only the transaction log
    • Tail Log backup can be performed, but it leads to a corrupt database
  • Backup chain is not broken, when you switch between full <> bulk logged <> full
  • Backup chain is only broken when you switch to the SIMPLE recovery model
  • Database Snapshot can't be created on a database in the RESTORING state because Backup/Restores aren't going through the Buffer Pool
  • SQL Server can't rebuild a partition, when they are spread across filegroups, where some filegroups are readonly
    • Therefore you can use Partitioned Views to union the Read/Write and the ReadOnly filegroups
  • When you do a Full backup of a readonly filegroup, nothing else (diff, log backup) has to be done
    • Just back it up once, and you're done
  • COPY_ONLY
    • Also possible with transaction log backups - will not clear the transaction log
  • For each backup device a writer thread will be created
    • For the restore a seperate reader thread will be created for each backup device
  • Mirrored Backups
    • When a mirror disappears, the entire operation fails
  • CONTINUE_AFTER_ERROR
    • Forces Backups & Restores of corrupt databases
  • Backup Compression new on SQL Server 2008 Enterprise Edition
    • SQL Server 2008 R2 also includes it in Standard Edition

 

Module 3: Restores

  • Files can be only set OFFLINE, but you have to restore from backup to get it ONLINE
  • Prevent that Backup Compression preallocates space
    • Trace Flag 3042
    • kb2001026
  • STOPAT does nothing on a full or diff backup restore
    • It's just syntetical reason
  • After STOPAT a full database backup should be taken to create a new well-known recovery starting point
    • Otherwise the restore sequence begins at the initial full backup and all subsequent restores must use STOPAT, which is a way more complicated
  • fn_dump_dblog
    • Look into a backup
    • 64 parameters!!!
  • STOPBEFOREMARK
    • Stops the restore process on a specific LSN
  • Piecemeal Restore
    • PRIMARY filegroup must be restored with the PARTIAL option
    • E.g. Single Page Restore when a page is corrupt
    • Only possible in the FULL or BULK LOGGED recovery model
    • Must start with the PRIMARY file group
  • sp_delete_backuphistory
    • Backup history tables in msdb must be cleaned up manually
  • Startup parameter -Q
    • Starts SQL Server without creating TempDb
    • Can be used when the model database is damaged, and SQL Server can't create a copy of it for TempDb
  • xp_readerrorlog
  • Option RESTART
    • Skips steps during restore, when they are already done
    • Writes a .CKP file that stores the different phases
    • Stores in the default specified Backup folder
    • TF 3004: Instant File Initialization
    • TF 3014: What's going during restores
    • TF 3605: Print out what caused on TF 3004 and TF 3014

 

Thanks for reading

-Klaus

Tuesday, August 16, 2011 1:45:16 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [2] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Monday, August 15, 2011

My whole weekend was dedicated to MCM studying, and I've reviewed a lot of stuff that we have learned through the last week, and I was also able to read a lot of additional whitepapers and blog posts, that Paul, Kimberly, and Jonathan have referred to us.

Today morning week 3 of the SQLskills training started. This week is all about High Availability and Disaster Recovery and seems to be a lot of fun, and I expect to see a lot of complicated demos and usage scenarios how to combine HADR technologies in SQL Server.

Some already have asked me, how my day looks like, so I want to share my daily schedule here with you:

  • 06:30am
    • Wake up
  • 06:30am – 07:00am
    • Getting up
    • Reading the news that have happened in Austria (I'm 9 hours behind the time in Austria, so it's almost 04:00pm in the evening in Vienna
  • 07:00am – 07:30am
    • Video Chat with Karin & Philip
    • Philip already enjoys it, and looks every day forward to it, even he is only 18 months old J
  • 07:30am – 08:30am
    • Breakfast at SQLskills training, get up and running for the training
  • 08:30am – 05:30pm
    • SQLskills training
  • 05:30pm – 07:00pm
    • Some time that is not dedicated to SQL Server ;-)
  • 07:00pm – 11:00pm
    • Reviewing training material/notes from the day, reading whitepapers, working on some things in SQL Server that I want to try based on the training

This schedule repeats the whole week, expect this week, because the training "only" runs for 4 days.

Thanks for reading

-Klaus

Monday, August 15, 2011 6:49:18 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Saturday, August 13, 2011

Today I've not taken too much notes, because the whole afternoon was about the Management Data Warehouse and Multi-Instance Management. But before that Paul and Jonathan have spoken a lot about troubleshooting with DMVs.

Module 12: DMVs – Part 2

  • sys.dm_io_virtual_file_stats
    • Spikes can't be seen from this DMV, only through perfmon.exe
  • I/O Backup activity is tracked by sys.dm_io_virtual_file_stats
    • I/Os aren't going through the Buffer Pool, but the I/Os are managed by SQLOS
  • There can be only a maximum of 32 outstanding I/Os for the log file per database
  • CHECKPOINT Throttling
    • CHECKPOINT process will throttle itself down, when the latency is more than 20ms
    • When CHECKPOINT occurs during shutdown, it will throttle itself down, when the latency is more than 100ms
    • SQLIO Basics Chapter 2, Page 48
  • Log Flushes
    • A VLF has several log blocks of size between 512 bytes to 60kb
    • When a transaction is committed, rollback or reaches a size of 60kb it is copied to the Log Cache Manager
    • Log Cache Manager has 128 buffers per database
    • Spinlock must be aquired when accessing the Log Cache Manager
      • LOGCACHE_ACCESS
    • Log Cache Manager flushes the buffer asynchronously out to the I/O sub system
      • Here is the limit of the 32 outstanding I/Os or 3840kb on x64
  • Lazywriter uses the BUF structure to know the last 2 times, when a page was accessed
  • sys.dm_os_buffer_descriptors can be used to check which database has the highest pressure in the Buffer Pool when memory pressure exists
  • DBCC CHECKDB disfavours pages read in the buffer pool
    • sys.dm_db_index_physical_stats also uses disfavouring
    • "bstat" in DBCC PAGE output in page header has one bit, that says if the page is disfavoured or not, but these bits are not documented
  • Backups don't touch the buffer pool
  • When a scan reads data of more than 10% of the buffer pool, the pages are disfavoured immediately
  • sys.dm_db_partition_stats
    • Gives you page count, instead of using sys.dm_db_index_physical_stats which must touch the index
  • Version Store is completely no-logged
    • TempDb has a lot of different behavior regarding transaction log, therefore the Version Store was put into TempDb and not into the user database
  • sys.dm_exec_procedure_stats
    • Returns runtime statistics about executed stored procedures
  • Shared Locks are not acquired for master and TempDb when you set the database context to it
  • Lock list of the Lock Manager is a dynamic list
    • It can change during the reading of sys.dm_tran_locks
    • The output of sys.dm_tran_locks is not a precise output
  • Lock conversion will not wait indefinitely
  • sys.dm_os_ring_buffer
    • Written by System Health events
    • RING_BUFFER_CONNECTIVITY shows how long a Login Trigger or a Resource Governor classifier function takes for execution
      • SspiProcessingInMilliseconds: Authentifcation time in Active Directory
  • There is a memory clerk for each memory node (Hard- and Soft-NUMA)
  • DAC has it's own memory node
  • sys.dm_os_memory_node_access_state
    • Cross NUMA node memory access statistics
    • Trace Flag 842 is needed
  • Implicit Conversions
  • Bookmark Lookups can lead to Deadlocks

 

Thanks for reading

-Klaus

Saturday, August 13, 2011 1:18:13 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Friday, August 12, 2011

You can find my Service Broker sample application which I presented during the SQLskills Immersion Event in Bellevue here for download: http://www.csharp.at/Downloads/SQLskills_ServiceBroker.zip

Thanks

-Klaus

Friday, August 12, 2011 3:49:51 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
Conferences | SQLServer | SQLServerPedia

Today Jonathan has presented on analyzing trace data, and Kimberly has spoken on troubleshooting Plan Cache Issues and Index Consolidation. It's really awesome when you listen to Kimberly, because she is speaking so fast, and delivers such a great quality of content – really awesome!!!

Module 10: Analyzing Trace Data

  • Default Trace
    • Logs everytime when an object is created and deleted
    • Also for Temp tables => Default Trace can get really big
    • Lightweight Trace defined by the Product Support Team
    • Uses DBCC commands
    • DBCC command are also logged in the Default Trace
    • sys.configurations, "default trace enabled" to check if Default Trace is enabled/disabled
    • Can be enabled/disabled through sp_configure
    • Default Trace has always ID of 1
    • Default Trace can't be changed
    • You can create your own Default Trace
      • Disable the original Default Trace
      • Create your own
        • TempDb object creations can be excluded
    • 5x50MB files
      • Server Activity impacts retention period
    • It writes to the error log path
      • Can't be changed
      • If you change the default error log path, you also change indirectly the location where the Default Trace is written
  • sp_get_query_template to normalize statements can be expensive!
    • Cursor must be used, so that you can use it for the result in a trace file
  • When you consolidate several databases onto a new instance, ad hoc workloads should put together, because they both have problems
    • Doesn't make sense to mix these workloads with parametrized workloads
  • SQLDiag can be used for (Remote) SQL Server Health Checks
    • Use Extended Events in it through custom tasks
    • SQLskills runs SQLDiag in the snapshot mode for SQL Server Health Checks
    • /C 2 compresses the output into a CAB file
    • SQLDiag needs sysadmin priviledges on the monitored server
  • Blocked Process Report

 

Module 11: DMVs – Part 1

 

Thanks for reading

-Klaus

Friday, August 12, 2011 1:44:30 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Thursday, August 11, 2011

Nothing to say about today, Jonathan did really a great job describing Extended Events and Baselining/Benchmarking to us, and his boss – Paul – did a quick really great overview of Resource Governor. I've done a lot in these areas in the past, so that was a more easy one to me than yesterday J. Here are my study notes for today.

Module 7: Extended Events

  • SQL Trace will be replaced by Extended Events some time
  • SQL Denali CTP3 has more than 500 Extended Events
  • Event Sessions with events with no targets are possible
  • Event Sessions with targets and no events are possible
  • The Event Engine has no idea of Extended Events
    • It only provides an operational environment
  • Event Sessions have memory buffers attached
  • Dispatcher Pool is a worker pool
  • Package is a container about events with metadata
  • package0 is a container about generic things like targets
  • Any event can work with any action with any taraget from any packet
  • ETW (Event Tracing for Windows)
    • Gets information from the Windows Kernel
    • ETW & Extended Events are integrated to each other
  • Fastest first false value should be placed in the first place in a predicate
    • Support for short circuit evaluation
    • First false evaluation prevents events from firing
  • You can bind to Global State Data through Actions
    • Like SPID
  • Predicates can store state
    • You want only to process a event when it is fired the 5th time
  • Actions are accessing Global State Data
  • Actions are executed after a predicate is evaluated
    • When an event will not be fired, the action will be not executed
  • Actions are executed synchronously
    • Can impact performance!
  • By default the Ring Buffer Target uses 4 MB
    • ring_buffer target (DMV) can only return 2 MB, therefore mailformed XML can be returned
    • Limit therefore the Ring Buffer Target to 2 MB
  • Denali only provides an asynchronous Bucketizer
    • Synchronous should not be used anymore in SQL Server 2008 (R2)
  • Event Counter Target can be used to check how often an event is fired
    • For planning more specific Event Sessions
    • With that information you can also redefine your predicates to reduce the events needed to process
  • Event Pairing Target is used to match events
    • Bad example from BOL: Lock Acquired and Lock Released
      • Because of Lock Escalation, Lock Released is not fired anymore
    • Can be used for finding orphant transactions
  • Predicates are working on map keys, and not map values
  • Whitepaper "Using SQL Server 2008 Extended Events" by Jonathan Kehayias
  • Shred XML data in a table and then do analysis from the table
    • It's much faster
  • Event Sessions are isolated from each other
  • It takes 2 microseconds to fire an event, everything else is done asynchronously
  • Dispatch of async targets occurs under 2 conditions
    • The memory buffer becomes full
    • Dispatch Latency exceeds
  • sys.dm_xe_packages.capabilities is a bitmap mask
  • Extended Events uses Multi Page Allocations outside of the Buffer Pool
    • On x32 this is VAS address space
    • This can lead to allocation problems
  • Metadata file in depricated in Denali (Async File Target)
  • greater_than_max_float64
  • less_than_min_float64
  • NETWORK_IO = ASYNC_NETWORK_IO in sys.dm_os_wait_stats
  • MSSQL\Install.u_tables.sql
    • Contains the System Health Event Session
  • Events can't be changed
    • They must be dropped from the Event Sessions and added with the changed definition
  • Actions are executed syncronously
  • Causality tracking should be used for event correlation
    • Don't add actions for event correlation
  • Memory Dumps are placed into the LOG folder
  • Event Sesions can be automatically started when SQL Server is started
    • STARTUP_STATE
  • asynchronous_file_target can be read outside of SQL Server in SQL Server Denai CTP3
  • There can be only one ETW session on the entire Windows Server
  • Troubleshooting Recompiles with Extended Events
    • In the first step trace the Recompiles on the server level
    • In the second step trace the Recompiles in the database, where the recompiles were highest
    • Use the Bucketizer Target for that
  • sys.dm_xe_session_targets is the Ring Buffer target
  • Parameter Sniffing can be troubleshooted through Extended Events
    • use greater_than_max_int64
    • Events gets only captured when the stored procedure execution get's slower
      • When a "bad" parameter value was provided

 

Module 8: Resource Governor

  • Enterprise Edition only!
  • Can be used to limit MAXDOP on a more granular level
  • MAXDOP
    • Workload Group MAXDOP 4, Server MAXDOP 1
      • You can do control MAXDOP through Query Hints from 1 to 4
      • But you can't do anything more than MAXDOP > 4 through a query hint, because the workload group throtted it down to a maximum MAXDOP 4
  • Resource Governor will override the MAXDOP query hint
    • Query hint
  • It governs per scheduler
  • Resource Governor can't limit existing connections
  • Connections can't be migrated between workload groups
    • Connection must be reset, or disconnect/reconnect
  • I/O, TempDb can't be controlled through Resource Governor
  • You can limit the number of active connections to a workload group/database
  • CPU/IO affinity masks are depricated in Denali
  • Throtteling is only done when there is contention
    • Otherwise CPU limit are ignored
  • The internal pool can be changed
    • The classifier function and login triggers are running in the internal pool
  • Classifier function must return a SYSNAME
    • It can't be a SQLCLR function, it must be a T-SQL function
    • But you can call a SQLCLR inside the T-SQL function
  • CPU for Backup Compression can be limited through Resource Governor
  • Perfmon Counters
    • SQLServer:Resource Pool Stats
    • SQLServer:Workload Group Stats
  • You can't tell if a specific query was throttled
  • Connections are grouped into workload groups/buckets
  • Whitepaper on Resource Governor: http://msdn.microsoft.com/en-us/library/ee151608.aspx
  • Parallel Index Rebuilds/Parallel DBCC CHECKDBs are Enterprise Edition only!
  • You can only have up to 20 resource pools, 18 user defined
    • But the max doesn't really make sense
  • GROUP_MAX_REQUESTS
    • Limits the number of concurrent connections (0: unlimited connections)
    • Configured on the workload group
    • Perfmon Counters
      • Workload Group Stats: Active Requests
      • Workload Group Stats: Queued Requests
  • Extended Events have a resource pool id as action
  • Only for one SQL Server Instance!
    • Governing across SQL Server Instances doesn't work

 

Module 9: Baselining & Benchmarking

  • Memory Ballooned
    • Because of Balloon drivers
  • Ring Buffer provides the CPU time in sqlservr.exe
  • Memory pressure problems in the Buffer Pool
    • Low PLE
    • Low or no Free Pages
    • High Lazy Writes/sec
    • High Fee List Stalls/sec
  • SQL Load Generator: http://sqlloadgenerator.codeplex.com
  • SQL Trace
    • The traces itself filter out unrelevant events
    • That's a big difference to Extended Events, where events are not fired, if they are not needed
    • When an event is registered inside the system, it is send to EVERY trace, and the trace itself has to filter out, if it is interested in the event, or not
  • SQL Alerts can be used to automatically start a perfmon trace through logman.exe or to start a SQL Trace

 

Thanks for reading

-Klaus

Thursday, August 11, 2011 1:30:49 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia | SQLMCM
 Wednesday, August 10, 2011

Today's day was Jonathan Kehayias days, and it was pretty impressive. Jonathan covered the following 3 modules, and he can speak really continuously and forever J

  • IO – Storage Area Networks
  • IO – Installation and Testing
  • SQLOS

I've already read few whitepapers in the past about SANs and also watched the MCM Readiness videos about it, but the material that Jonathan was presenting was pretty impressive. There were a lot of concepts new to me (like Multi Pathing), therefore I didn't have taken any notes in this module, because I have listened to Jonathan and tried to follow him. He also did a very great demo about Multi Pathing with the iSCSCI Target and iSCSI Initiator provided by Microsoft. The SAN module was definitely a module, where I learned around 90% new things.

Important note:
Those notes are the things that I have written down for my personal remembering. So please don't take anything for 100% sure and true in the way that I have written it. For some notes you also have to know the context in which we have discussed it, and why I have taken that note for me personally. Today morning we had a discussion about one specific note that I have taken about CXPACKET waits and why Hyper-Threading can be bad, but at always "it depends", and some things/context information I haven't written down, because I have it somewhere in my brain J.

So here are the notes that I have taken during the 2nd day of SQL MCM training.

Module 5: IO – Installation and Testing

  • GPT partitions can manage more than 2 TB of data
    • Max: 256 TB
  • Spanned disk just provide more size, but not more performance
    • Each drive is used sequentially
  • Allocation Unit Size should be the size of a single extent
  • Tools
    • SQLIO
    • IOMeter

 

Module 6: SQLOS

  • Each NUMA node gets its own Lazywriter
  • MAXDOP: number of physical cores per NUMA node
  • http://en.wikipedia.org/wiki/CPU_cache
  • Soft NUMA usage: http://msdn.microsoft.com/en-us/library/dd537533(v=sql.100).aspx
  • SOS_Worker: Thread
  • SOS_Task: Operation that a SOS_Worker executes
  • Startup parameter -P24: gets you 24 processors in SQLOS
  • Hidden schedulers are processing background tasks
  • Visible schedulers are processing user requests
  • Built-In SQLCLR data types are not supported when Fiber mode is activated
    • SQL Server will gives you an error message when you access a SQLCLR data type column
  • SQL Server Connections are bound to a scheduler
  • Each scheduler has its own waiter list and runnable queue
  • Scheduler Monitor
    • Generates automatically a mini-dump for post-mortem debugging
  • Names instances are running on different ports for the DAC
  • PAE (Physical Address Extension) changes the memory pointer size from 32 to 36 bits
    • 64 GBs are addressable in the user mode
    • Only usable for the Buffer Pool, NOT for the Plan Cache
  • /3 GB Option
    • Uses 1 GB from the Kernel mode
    • That 1 GB stores normally PTEs (Page Table Entries)
    • Therefore it's only possible to use a maximum of 16 GB RAM, because of the reduced PTEs
  • Understanding VAS Reservation
  • Locked Pages is only for Buffer Pool, not for Plan Cache
    • Can be used also by Standard Edition with Trace Flag -T845
    • Can be used for Windows System Cache problems
    • Startup time of SQL Server takes longer because SQL Server allocates all memory up to the Max Server Memory setting
    • The memory must be also contiguous, otherwise SQL Server gets less memory for the Buffer Pool
  • Memory\Available Mbytes > 150 - 300MB
    • Otherwise it means that the Windows OS is under memory pressure
  • Internal Memory Pressure
    • Another Memory Clerk wants to allocate memory
  • Resource Monitor responds to memory pressure
    • Outputs information to the OS ring buffer
    • ring_buffer_type = "RING_BUFFER_RESOURCE_MONITOR"
  • Activity Monitor adds a lot of load to an system which is in performance problems
    • Especially TempDb
  • NUMA Memory Balancing is not shown through DBCC MEMORYSTATUS
  • http://blogs.msdn.com/b/psssql/archive/2009/05/15/how-it-works-dbcc-memorystatus-locked-pages-allocated-and-singlepageallocator-values.aspx
  • http://blogs.msdn.com/b/psssql/archive/2010/02/23/how-it-works-sql-server-2008-numa-and-foreign-pages.aspx
  • Scheduler can be set offline through the Affinity Mask
  • Unloading AppDomain on x32
    • Indication for Memory Pressure
  • Interpreting DBCC MEMORYSTATUS
  • Max Worker Count should be changed to a higher value when you use Database Mirrroing with a large amount of databases
    • Mirroring uses at least 3 threads for principal and at least 5 threads for the mirror per database
  • One worker per level of DOP (e.g. 24)
    • 24 Threads for the Producers
    • 24 Threads for the Consumers
    • 1 Thread for the Coordinator
    • For each executed query!
    • Those threads are bound to parallel queries and can't be used by anything else!
  • How To Diagnose and Correct Errors 17883, 17884, 17887, and 17888

 

-Klaus

Wednesday, August 10, 2011 1:48:52 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Tuesday, August 09, 2011

Today was my first day of SQL MCM training here in Bellevue. We started at 08:30am and now (05:30pm) Kimberly is currently talking about how to use the provided VPC J. The main theme for today's day was about learning the fundamental about performance tuning. We have covered the following 3 modules:

  • SQL Server IO
  • Waits & Queues
  • IO – Core Concepts

In the morning Paul and Kimberly provided a foundation about how SQL Server is doing IO and the inner architecture of SQL Server. There was a big overlap with the first day of the first week (which I have attended in London), but this was "by design" J. Afterwards Paul jump into Waits & Queues and he has shown a lot of different demos about the various "well-known" wait types like CXPACKET, ASYNC_NETWORK_IO, WRITELOG, etc. Paul also walked down to Latches and Spinlocks, which was really great. Afterwards Jonathan kicked in and told us a lot of IO Core Concepts like the difference between traditional hard disks and SSDs.

I've written down a lot of personal notes for the first day, and the great thing is that I want to share all those notes (and all notes that are coming within the next 3 weeks) with you, so that you can get a picture about the content that we covered. Also a big thanks to Paul, that he allows that! J

Module 1: SQL Server IO

  • File Header Page in the LDF is a mirror of the Boot Page of the MDF
    • SQL Server can write the File Header Page in parallel but NOT the VLFs
    • SQL Server has to read all File Header Pages during startup, therefore it is not recommended to have too much databases on a SQL Server instance
  • DEFAULT file group should be changed so that new objects go automatically to another file group instead of PRIMARY file group
  • When IFI (Instant File Initialization) is enabled you can have a larger Auto Growth setting instead of when IFI is not enabled
  • When Auto Growth for the Log File kicks in, NO additional log records can be flushed to disk and therefore have to wait
    • But only for the database where Auto Growth kicked in, and NOT for the WHOLE instance
  • FGCB_ADD_REMOVE Latch (File Group Control Block)
    • Needed for add/remove files, and Auto Growth
    • Can be checked if Auto Growth is a performance issue
  • The IO subsystem can intersect the partition alignment of Windows Server 2008
    • The partition can be therefore ALSO misaligned!!!
  • File System Level Defragmentation
    • Shutdown SQL Server first - corruption can occur!
    • Gains maybe 1 - 2% performance (when doing large range scans)
  • Reads from the TxLog can be sequential or random
    • Sequential
      • Log Backup
      • Log Reader Agent for Replication
    • Random
      • Crash Recovery
      • Rollback
    • Log Records are chained together backwards through their LSN
    • Rollback always goes backward, therefore Random IO
    • Redo goes forward
    • Rollback goes backward
  • Minimally Logged Operation
    • Changed Data Pages are flushed to disk during the COMMIT
    • The flush is Extent based
  • Allocation Weightings
    • Weightings are per filegroup
    • One file always has a weighting of 1
    • Weightings are recalculated
      • Grown, Shrunk, Added, Removed or 8192 allocations took place
    • During an allocation the weighting is reduced by 1, e.g. 8192 to 8191
    • FGCB_ADD_REMOVE Latch when weightings are recalculated
    • Proportional Fill doesn't work on TempDb
    • Can be tracked through Extended Events - see Jonathans Blog
  • TF 1117
  • Backups/Restores
    • Backups are doing sequential IO
    • Backups are not going through the Buffer Pool
      • They are going directly to the data files
    • Fast Recovery
      • Only available on Enterprise Edition
      • Database is accessible after the REDO phase, and before the UNDO phase begins
    • Separate threads when you do backup striping
  • TempDb
  • Perfmon counter "Disk Queue Length" is not relevant
    • Outstanding IOs are ok, just look at the latency times from DMV sys.dm_io_virtual_file_stats

 

Module 2: Waits & Queues

  • Waits are just symthoms
  • LCK_M_S: Lock Mode Shared
  • APPEND_ONLY_STORAGE_FIRST_ALLOC
    • Latch on the Version Store
  • FGCB_PRP_FILL: proportional fill latch
  • Dead Latches are possible
    • Bugs inside SQL Server
  • Dead Spins are not possible
    • You can't acquire a Spin, when it is already acquired
  • When a Spinlock is acquired, nothing else can't be latched or locked
  • SUSPENDED threads are not a ordered list, anyone can be signaled to go into the RUNNABLE state
  • RUNNABLE is a FIFO queue, expect when Resoure Governor is used
    • Workload starvation could be theoretical possible for low priority workload
  • Propagated Page Split
    • Scans from the Virtual Root down to ensure that the Shared Latches are present
  • CXPACKET
    • Parallel Index Rebuild uses the statistics to determine how to divide the work
    • Resource Governor can be used to set MAXDOP for resource pools
      • DBCC CHECKDB can't use MAXDOP query hint, so Resource Governor can be used with a dedicated resource pool
  • OLEDB
    • DBCC CHECKDB uses OLEDB internally
    • Microsoft Office (Access, Excel)
  • WRITELOG
    • SSD: 1 - 2ms
    • Traditional Hard Disk: < 10ms
  • Reasons for CXPACKET
    • Physical Cores are a little bit faster than logical cores, therefore CXPACKET waits also can occur
      • Therefore Hyper Threading is not recommend for SQL Server
    • Scan of partitioned tables, when one partition is on a faster storage system than another partition
    • Out-Of-State Statistics
  • Service Broker Wait Types
  • Preemptive Wait Types of Win32 IO are indicating that FILESTREAM is used
  • System table contentation can be removed if you use multiple insertion points (like in TempDb)
    • Create a dedicated table for each SPID in TempDb (not a temp table)

 

Module 3: IO Core Concepts

  • "General" SQL Server Latency recommendation
    • < 8ms: Excellent
    • < 12ms: Good
    • < 20ms: Fair
    • > 20ms: Poor
  • Parallel disk head positions are not possible
    • All disk heads are positioned on the same position
  • Short Stroking
    • Storing data in the outer tracks because of the higher data density and lower seek times
    • Disks are storing data from the outer side to the inner side
  • SSD Seek Times
    • From 0.0ms to 0.16ms
  • RAID1 can improve read performance by reading from each disk
  • RAID10 and RAID01 provides the same performance, but a different redundancy
  • RAID01
    • 1 drive failure fails the whole RAID 0 array

 

Thanks for reading

-Klaus

Tuesday, August 09, 2011 1:34:40 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [1] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Monday, August 08, 2011

For the next 3 weeks I'm in Bellevue/WA for the SQL MCM training provided by Paul Randal, Kimberly Tripp, Jonathan Kehayias, and Bob Beauchemin of SQLskills.com. So don't expect any technical weblog posting from me within that time. I'm sitting in the following 3 training classes:

  • Performance Tuning (5 days)
  • High Availability & Disaster Recovery (4 days)
  • Security, Powershell & Development Support (5 days)

I have already planned to attend the first week of training in London (Internals & Performance), but I had to cancel it after the first day, because of health issues…L. I arrived yesterday evening from Vienna/Austria, which is a very long trip across half of the world. It took me around 24 hours from door to door until I reached Bellevue. During my 2 long flights (VIE – IAD – SEA) I had plenty of time to go through the SQL MCM pre-reading list and read a lot of different whitepapers. Today's day was also about reading, working, and learning about SQL Server – always with a big jetlag in the back…

Tomorrow is Day 1, and I'm really looking forward to it. I'm trying to blog every day about the training, what I have learned, and how I feel during those 3 weeks of powerful SQL Server training!

Thanks for reading

-Klaus

Monday, August 08, 2011 1:55:50 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [1] - Trackback
.NET German | Conferences | SQLMCM | SQLServer | SQLServerPedia
 Wednesday, August 03, 2011

Since today its official, I'm presenting 2 sessions at the SQLbits conference in Liverpool (http://www.sqlbits.com) from September 30 – October 1. Here are both of my session abstracts:

Advanced SQL Server 2008 Troubleshooting

It's Friday, 05:00pm. You are just receiving an email that informs you that your SQL Server has enormous performance problems! What can you do? How can you identify the problem and resolve it fast? Which tools provides you SQL Server for this task? In this session you will see a lot of different tools with which you can do effective SQL Server troubleshooting. You will learn how to identify performance bottlenecks with those tools, and how to resolve the identified bottlenecks.

Understanding SQL Server Execution Plans

Do you know SQL Server Execution Plans? Yes! - and can you read/analyze them? No... For the beginner it is not very easy to understand and explain execution plans generated by SQL Server for your queries. Therefore this session gives you a good overview and understanding about SQL Server execution plans and how you can read them without reading through complete books. In this session you will see the basic constructs of an execution plan, and how SQL Server uses them to translate your SQL based query to an internal format which is executed by the execution engine of SQL Server. After attending this session you are able to understand and analyze execution plans generated by your queries, and how you can tune them with the adoption of additional indices. Finally you will also see which additional information about your queries an execution plan will expose to you.

I'm looking forward to see you in one or both of my sessions J

-Klaus

Wednesday, August 03, 2011 7:37:22 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Tuesday, July 26, 2011

A few days ago I had an interesting conversation on Twitter about my upcoming speaking engagements. I really realized at this time that I have a lot of different SQL Server conferences in my pipeline where I'm speaking over the next months. Here are the conferences where you can meet me, and talk about SQL Server related topics.

  • September 12 - 14, London/United Kingdom:
    I'm doing my own "Advanced SQL Server Performance Troubleshooting Workshop", which is aimed for the senior DBA/DEV with experienced know-how in SQL Server. You can find further information about the workshop at http://www.csharp.at/events.html where you can also place your registration. If you are registering by the end of this month, you will get a discount of GBP 200!
  • September 23, Solid Quality Summit, Budapest/Hungary, http://www.sqlu.com
    I'm doing 3 sessions about SQL Server performance troubleshooting (what else?). I'm talking about Database Internals (yes, that's THE session from SQLbits 8 J), Troubleshooting TempDb Performance, and Advanced SQL Server Performance Troubleshooting Techniques
  • September 26 – 28, Vienna/Austria
    I'm doing again my own "Advanced SQL Server Performance Troubleshooting Workshop" in Vienna, which is again aimed for the senior DBA/DEV. I'm also able to give you a EUR 100 discount, if you register by the end of this month at http://www.csharp.at/events.html
  • September 29, SQLdays, Rosenheim/Germany, http://www.sqldays.net
    SQLdays is a nice and niche SQL Server conference in South Germany (in Bavaria) where they have really good beer J. I'm again doing 3 performance troubleshooting sessions about "Maintaining VLDBs", "Troubleshooting TempDb", and "Advanced SQL Server 2008 Troubleshooting Techniques".
  • September 30 – October 1, SQLbits 9, Liverpool/United Kingdom, http://www.sqlbits.com
    I've submitted several advanced sessions about troubleshooting SQL Server related performance problems. I don't know if I can speak, but I'm speaking regularly the last years, so if I get accepted, I will be of course there!
  • October 10 – 14, SQLPASS, Seattle/USA, http://www.sqlpass.com
    That's the really great one! I'm speaking at the SQLPASS Community Summit regularly since 2006 (expect 2008 because of personal reasons), so this is now my 5th contribution to the best SQL Server conference on earth! I was one of the first European speakers that got a spotlight session in 2007! I'm again doing my famous session about "Advanced SQL Server Troubleshooting Techniques".
  • November 7 – 9, Zurich/Switzerland
    I'm doing my own "SQL Server Performance Tuning & Troubleshooting Workshop" in Zurich/Switzerland, which is aimed for professional DBAs/DEVs. This workshop is very new, because I've announced it yesterday evening J. You can find further information about the workshop at http://www.csharp.at/events.html
  • November 10, TBD
    On November 10 I'm speaking on another SQL Server conference in Europe, but at this time I'm not allowed to tell you any more things about it… ;-(

As you can see from this list, there a lot of opportunities, where you can meet me face-2-face and talk to me about SQL Server related topics. As you can also see I'm doing a lot in the area of performance tuning and troubleshooting. If you need help in these areas of SQL Server, don't hesitate to contact me.

The cool thing is that I'm doing my session about "Advanced SQL Server Troubleshooting Techniques" several times within the next months, so you can expect here a really awesome content. And trust me, this session will differ from everything you have seen in the past, I'm trying to deliver that session in a really new way with some fun for you!

See you soon & thanks for reading!

-Klaus

Tuesday, July 26, 2011 8:35:26 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Thursday, June 16, 2011

Yesterday we got confirmation from SQLPASS if our submitted sessions for the upcoming SQLPASSS summit in Seattle (October 11 – 14) were accepted. I’m very lucky to announce that my submitted session “Advanced SQL Server 2008 Troubleshooting” made it to the summit as a regular session (75min)! Smile Here’s the abstract that I have submitted:

It's Friday, 05:00pm. You are just receiving an email that informs you that your SQL Server has enormous performance problems! What can you do? How can you identify the problem and resolve it fast? Which tools provides you SQL Server for this task? In this session you will see a lot of different tools with which you can do effective SQL Server troubleshooting. You will learn how to identify performance bottlenecks with those tools, and how to resolve the identified bottlenecks.

I’m really proud of presenting this session, because all my work from the past and from the future is about SQL Server performance tuning and troubleshooting. I’ve also presented a 1-day workshop at the previous SQLbits conference about this topic, where I got really good and promising feedback. See here for some attendee voices. I’m also organizing several 3-day long workshops across Europe about this topic. So, if you are not able to attend the SQLPASS summit, but you are interested in that topic, you can also join one of my scheduled workshops here in Europe – see http://www.csharp.at/events.html for further information.

See you soon in Seattle!

-Klaus

Thursday, June 16, 2011 9:51:05 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Sunday, June 12, 2011

The most amazing journey that I have done in the past years was definitely SQLcruise (see http://www.sqlcruise.com) – a SQL Server event organized and running by Brent Ozar (Blog | Twitter). Without the speakers, and the sponsors we were 14 cruisers that were flying to Seattle across the world for attending SQLcruise. Our journey took us from Seattle to Juneau, to Skagway, to Glacier Bay, to Ketchikan, to Victoria, and finally back to Seattle.

image

Our home for the 7 days long cruise was the Norwegian Pear, one of the biggest cruise ships I have ever seen in my life:

IMGA0005      IMGA0006

We left Seattle at Sunday (May 29) at 04:00pm. Here are some impressions cruising out of Seattle and enjoying its skyline.

IMGA0017     WP_000248

During the first days on sea we had a session from Buck Woody (Blog | Twitter) about career, where we have seen that Buck is a really good story teller. Tim Ford (Blog | Twitter) had a session about DMVs/DMFs in SQL Server and how you can organize them through a periodic table – very interesting concept Smile. Brent also gave a session about SANs and how you can test and improve their performance. After cruising the whole Monday and the half of Tuesday we arrived around 02:00pm on Tuesday in Juneau, where I did an excursion to the Mendenhall glacier. Here are some impressions:

IMGA0002     IMGA0010

After leaving Juneau Kendra Little (Blog | Twitter) did a really great presentation on Isolation Levels and Locking inside SQL Server. As you might know from her weblog NOLOCK is also acquiring some locks Winking smile.  Wednesday morning we arrived at Skagway were I took a train and went up to the White Pass Summit to the border of Canada. It was really awesome when you finally see all the snow and you know you started at an elevation of 0…

IMGA0053     IMGA0113

IMGA0111     IMGA0142

After leaving Skagway we went to Glacier Bay, the most interesting part of the whole cruise. Glacier Bay consists of a lot of different fjords, where you can see a lot of different glaciers and a lot of wild life.

IMGA0011    IMGA0021

IMGA0066    IMGA0109

IMGA0102    IMGA0133

After we left Glacier Bay, Buck did a presentation on Communication, where we learned a lot about how to communicate and which different variations of communication exists, even when you are writing weblog posts like this. On Friday morning we arrived in Ketchikan, where I did a kart tour adventure. Also very interesting and I had a lot of fun!

IMGA0003    IMGA0006

With those karts we drove around 15 miles on very uneven forest streets “somewhere” around Ketchikan. Those karts were able to speed up to 30 mph! Smile

After leaving Ketchikan Brent did a presentation on Defensive Indexing which was also very good and impressive. Brent also talked a lot of benchmarking and about his famous Excel sheet, where he collects PerfMon counters. On Saturday evening we arrived in Victoria, where I decided to stay on board and have the last night some fun at the various bars on the ship with some other cruisers.

IMGA0005a    IMGA0023

On Sunday morning we arrived back in Seattle, where I left the Norwegian Pearl around 08:30am and stayed the whole day in Seattle. My flight back to Vienna was leaving on Monday morning at 07:30am ;-(

WP_000306    WP_000303    WP_000319    WP_000325

I have also to mention the sessions that Grant Fritchey (Blog | Twitter) from Redgate, and Aaron Bertrand (Blog | Twitter) from SQL Sentry gave! Without those sponsors SQLcruise would not be possible!!!

Thanks

-Klaus

Sunday, June 12, 2011 1:44:33 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia | Travel
 Friday, June 10, 2011

As announced in both of my SQL Server sessions at DevConnections in Karlsruhe/Germany you can find here the slides & samples for download:

As also said yesterday, you get a 10% discount for my upcoming “Advanced SQL Server Performance Troubleshooting Workshop” - you can find here further information about the workshop and the registration details: http://csharp.at/Events.html
Thanks for attending my sessions Smile

-Klaus

Friday, June 10, 2011 8:20:49 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Tuesday, May 24, 2011

I’m working my whole professional work life (around 11 years) with SQL Server, and have see so many pitfalls in configuration options, deployments, and database designs. From all this know-how I’ve done in the past a lot of consulting engagements and have spoken at the various SQL Server conferences across the world about performance tuning and optimization. In sum there are so many things that you just HAVE to know about SQL Server, so that you can use SQL Server with the best possible performance. Today I’m very proud to announce that I’m now offering an advanced SQL Server Performance Optimization and Troubleshooting workshop at the international level!

We will be starting with our first public course in Central London/UK from September 12 – 14, and offering a second public course in Vienna/Austria from September 26 – 28. Further information about the detailed agenda and the registration details can be found at http://www.csharp.at/events.html. We have also several other locations across Europe in our pipeline, like:

  • Zurich/Switzerland
  • Oslo/Norway
  • Germany

If you want to see some feedback about what you can expect in this workshop, please refer to the following weblog post from me, where I have given a deep technical session about SQL Server Internals at the SQLbits conference this year in Brighton/UK: http://www.csharp.at/blog/PermaLink,guid,f1d784c8-ea53-4bc9-99df-6dfaab6f6f8c.aspx

I’ll be looking forward to see some of you at one of these advanced SQL Server workshops!

-Klaus

Tuesday, May 24, 2011 8:03:29 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Tuesday, May 17, 2011

It’s already a long time ago, since I spoke at SQLbits (first week of April), but yesterday the speakers got their session evaluation, and I’m very proud about the results of the 2 sessions that I have done at SQLbits:

  • Service Broker: Message in a Bottle
  • SQL Server 2008 Database Internals

The following 2 figures shows you the overall session metrics for both of my sessions:

image

image

As you can see my “SQL Server 2008 Database Internals” was very high rated and nearly a top rated session Smile. I want to share you the feedback that I got for this session:

  • Best talk of the day, absolutely fantastic knowledge of the internals of SQL Server.
  • A very good session the presenter was also good, I learn't a lot and the speaker used a methodical and logical approach to explaining pages/extents and I/O.
  • Although I scored this higher than the previous session,this is on reflection after the event - I've had a few 'A-ha' moments since attending, and the content itself was brilliant - Klaus really knows his stuff in this area. It was a VERY large room to present in, the audio wasn't quite as good as some others, and the display screen was quite low so it couldn't be seen by people more than 5 rows back.
  • Amazing depth - thanks, Klaus! Presentation skills generally good – real passion for the subject.
  • Klaus is obviously very knowledgeable and a very good presenter. I think because of the deep technicality of the subject, it's easy to lose focus, especially as it was just before lunch. Although I got lots out of the session there were a couple of occasions where I drifted off a bit. This isn't a critism of Klaus - it was just a very deep session that he was cramming into one hour.
  • Hugely enjoyable and very professional presenter. Conveyed enthusiasm and knowledge in equal measure. Excellent!
  • Really great in depth knowledge.
  • Brilliant speaker. Speaker has a great deal of knowledge in the subject and was able to convey it effortlessly, with a little humor :-) Fantastic session that made the 8 hour journey well worth it.
  • Very entertaining presentation on a somewhat dry subject.
  • Very knowledgeable and engaging.
  • Very good session.
  • Great enthusiasm and knowledge.
  • I was working on FoxPro since last 18 years and I am in view that few features in SQL server 2005 onwards had taken from FoxPro. I am quite aware of FoxPro database/table structure and exactly what looking for SQL in last few years. It does make impact on how you design you database, when you know how it is stored.
  • I also attended Klaus' sessions on the Thursday; I was very very impressed with his abilities as a speaker and the way in which he went through each issue. Everything was exceptionally clear, well prepared in terms of everything being prescripted in the demos and very clear on the results and advantages to understand each aspect. I would say he was the best speaker of any session I attended during the three days.
  • That was very cool, Klaus. Fascinating. Perhaps not something I *need to know, but I certainly came away with a much deeper and better understanding, feeling a lot more on top of the beast that is SQL server!

Here’s the feedback for my Service Broker session that I also want to share with you:

  • Really useful presentation especially as we are attempting to use service broker. He solved several problems I was experiencing with Service broker, including the alternative windows authentication over certification method. I would have liked to know more about the transport level issues but it was a 1 hour session and any more detail would cause the my brain to fry. it has left me wanting to go on the full day session if it is done again at SQL BITs.
  • Excellent presentation, as a newbie i'd not used Service Broker yet but Klaus made this an enjoyable and easy to learn experience.
  • Session was very good but I was expecting about how service broker can be used in HA/DR scenarios.
  • I attended this session to see Service Broker working as an SOA platform. Klaus demonstrated this very well.
  • I would have liked the session framed better in relation to other technologies and decisions to make.
  • The one suggestion I would make is to include a few situations where service broker would be useful vs where it might not be useful and also to compare more with other architectures that are similar (e.g. MSMQ).
  • Content aside (which in itself was still outstanding), this is the best delivery of a presentation I've seen in a long time.
  • you could see Klaus has a passion for this :)
  • Brilliant session
  • Klaus's enthusiasm for his subject is obvious. A really good, demo-heavy session on a subject I am not very familiar with which was engaging and fun. Very enjoyable!

The main problem that I had with my Service Broker session is TIME Winking smile. One hour is just too less to explain a fully distributed, and secure Service Broker application. Presenting a 75min or even 90min session on that topic would make it really awesome Smile. My (positive) learning from SQLbits is that the UK boys and girls like my presentation style and my topics, so I’m planning to do much more within the next months in the UK. Stay tuned for further information on that! Smile

-Klaus

Tuesday, May 17, 2011 10:03:33 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Monday, April 11, 2011

As announced in both of my sessions, you can download the slides & samples for my SQLbits sessions here:

Thanks for attending both of my sessions – it was a real fun for me to present them to you Smile

-Klaus

Monday, April 11, 2011 8:36:59 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [3] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Sunday, March 20, 2011

Sind Sie schon mal in das folgende Problem-Szenario gelaufen, und mussten Ihren wohlverdienten Feierabend und die Vorfreude auf das Wochenende opfern:

 

Freitags - 16:30. Sie erhalten eine Email, dass Ihre SQL Server Installation in enorme Performance-Probleme geraten ist!

Was nun? Wie können Sie das Problem schnell identifizieren und effektiv lösen?

Welche Tools stehen Ihnen dazu mit dem SQL Server 2008 (R2) zur Verfügung?

 

Am 24. Mai ist es endlich soweit:

Klaus Aschenbrenner – unabhängigier SQL Server Experte und internationaler Konferenzsprecher – führt den SQL Server Performance Tuning und Troubleshooting Workshop in Wien durch.

In einem kompakten und intensiven Tag zeigt Ihnen Klaus Aschenbrenner die richtigen Tools und vermittelt Ihnen das notwendige Know-How, um in Problem-Szenarien – wie oben genannt – schneller und effektiver zu einer sauberen Lösung zu kommen.

In diesem Workshop werden Sie eine Reihe von unterschiedlichen Tools kennenlernen, mit denen Sie ein effektives Troubleshooting einer SQL Server 2008 (R2) Installation durchführen können.

Sie werden einerseits lernen, die entsprechenden Problembereiche anhand bestimmter Scripte/Tools zu identifizieren, um diese anschließend aufgrund der gewonnenen Erkenntnisse zu beseitigen.

 

Inhalte:

· SQL Server Performance Monitoring Methologie

· Troubleshooting Execution Plans & Index Usage

· Troubleshooting Memory/CPU Probleme

· Troubleshooting TempDb & IO Subsysteme

· Performance Monitoring mit SQLDiag/SQL Nexus

 

Weitere Informationen zum Event können Sie sich unter http://www.csharp.at/Events.html ansehen, bzw. können Sie den dazugehörigen Folder unter http://www.csharp.at/Downloads/SQLFlyer.pdf herunterladen.

 

Veranstaltungsort:

Hotel & Palais Strudlhof

Pasteurgasse 1

A-1090 Wien

http://www.strudlhof.at

 

Inkludierte Leistungen:

· Workshop von 09:00 - 17:00

· 2 Kaffeepausen (Vormittag, Nachmittag)

· Gemeinsames Mittagessen

· Early-Bird Preis bis zum 08.04.2011: € 349,00 exkl.

· Danach: € 399,00 exkl.

 

Anmeldung:

· Durch Email an klaus.aschenbrenner@csharp.at mit Angabe der Rechnungsadresse.

· Ausgestellte Rechungen müssen bis zum Beginn der Veranstaltung einbezahlt werden, damit eine Teilnahme an der Veranstaltung gewährleistet werden kann.

· Bei weniger als 10 Teilnehmern behält es sich der Veranstalter vor, die Veranstaltung abzusagen, wodurch bereits einbezahlte Rechnungen zurückerstattet werden.

 

-Klaus

Sunday, March 20, 2011 9:39:29 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer
 Thursday, February 17, 2011

As I have announced in both of my sessions at the VSone conference in Munich, you can find the session material here for download:

Thanks for attending both of my sessions Smile

-Klaus

Thursday, February 17, 2011 12:06:24 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer
 Tuesday, February 15, 2011

As announced in my DWH workshop in Munich, you can find here my whole ETL solution. Thanks for attending my workshop Smile

-Klaus

Tuesday, February 15, 2011 6:52:50 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer
 Monday, November 15, 2010

As announced in both of my session you can find my slides & samples here for download:

Thanks for attending both of my sessions Smile

-Klaus

Monday, November 15, 2010 7:29:41 AM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Tuesday, November 02, 2010

On January 4, I’m speaking about index internals for the Performance Virtual Chapter of PASS (http://performance.sqlpass.org). Here’s my session abstract:

SQL Server provides two kinds of indexes for relational data: Clustered- and Non-Clustered Indexes. Both of them can be defined as unique and non-unique. In this session you will learn how to use Clustered- and Non-Clustered Indexes in your database and how you can improve the execution time of your queries with those indexes. Furthermore we will have a look into the concrete storage details of both indexes and how they differ when you define them as unique and non-unique and what's the tradeoff between it. Finally you will get some best practices how to deal effectively with Clustered- and Non-Clustered Indexes in your database.

 

I’m really looking forward to this great chance, and hope that you attend my session.

 

-Klaus

Tuesday, November 02, 2010 8:35:53 AM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Monday, October 25, 2010

I’m one of the 3 lucky guys whose submitted precon workshop for the developer category for PASS SQLRally is in the final selection for community voting! :-)

Here’s the abstract that I have submitted which gives you a good overview what I’m talking about, and what you’ll learn in my precon. If you think this sounds good for you, and you want to hear me at SQLrally, please vote for my precon workshop. Voting should be available within the next days at SQLRally.com.

What every .NET developer MUST know about SQL Server
Are you building database applications with the .NET framework for SQL Server? You know how you can perform INSERT, UPDATE, DELETE, and SELECT statements, but all the other areas of SQL Server are a black box for you? And sometimes you don’t know why your database application is getting slower and slower and consume more and more memory on SQL Server? If you are answering one of these questions with yes, then you are the right person for this intensive 1-day long SQL Server internals workshop presented by Klaus Aschenbrenner. In this workshop you will learn the inner workings of SQL Server, and how you can use this know-how when building your next database driven .NET application for SQL Server.

Klaus will give at the beginning an general overview about SQL Server, its architecture, and how SQL Server uses Execution Plans to execute a query. You will also learn about Plan Cache Polution, why it is bad, and how you can avoid it, when working with the .NET framework. After laying out these foundations, Klaus moves into the storage details of databases and tables, and shows you how SQL Server physically stores tables in the database file and how you can fine tune the physical storage with correct chosen data types and an intelligent table design. After you know the basics of Execution Plans and storage details, Klaus teaches you the architecture and the inner workings of indexes in SQL Server. You will see the differences between Clustered- and Non-Clustered Indexes and how they relate to each other. With this knowledge in your hand, you will then finally see how you can use different index tuning methods to speed up the execution time of your database queries.

Agenda

  • Overview about query execution in SQL Server 2008
  • Database Internals
    • Database Structure
    • Page-Design
    • Fixed data types
    • VAR data types
    • LOB data types
    • Sparse Columns
    • FILESTREAM Storage
    • Data Modification Internals
  • Transaction Log
    • Architecture
    • Backup/Recovery
    • Recovery Strategies
  • Execution Plans
    • Reading & Understanding
    • Operators
    • Physical JOIN operators
    • Capturing Execution Plans
    • Procedure Cache/Procedure Cache Polution
  • SQL Server Index Architecture
    • Heap Tables
    • Clustered Index
    • Non-Clustered Index
    • Index Depth
    • Clustered Key/Clustered Key Dependencies
    • Unique/Non-Unique Clustered Key (UNIQUIFIER)
  • Clustered Index Structure
    • Unique Clustered Index
    • Non-Unique Clustered Index
  • Non-Clustered Index Structure
    • Unique Non-Clustered Index
    • Non-Unique Non-Clustered Index
    • Non-Clustered Index on Heap Tables
    • Non-Clustered Index on Clustered Tables
  • Index Tuning
    • Covering Index
    • Avoiding Bookmark Lookups
    • Index Intersection
    • Index Join
    • Index Access Methods
    • Filtered Index
    • Indexed Views
  • Statistics
    • Usage in SQL Server 2008
    • Auto Stats
    • Statistics Maintenance
    • Analyzing Statistics
    • Multi-Column Index Statistics
    • Fill Factor
    • Index Reorganize
    • Index Rebuild
    • Online Index Rebuild
    • Statistics & Table Variables

-Klaus

Monday, October 25, 2010 9:58:14 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia

As announced in my workshop and in my sessions at the SQLdays 2010 last week in Rosenheim/Germany, you can download my shown slides & samples from here:

Have fun and thanks for attending my sessions/workshop

-Klaus

Monday, October 25, 2010 2:40:56 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Monday, October 04, 2010

As announced in my SQLBits workshop & session last week in York/UK, you can find the session/workshop material here.

Have fun!

-Klaus

Monday, October 04, 2010 4:44:00 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer | SQLServerPedia
 Friday, September 17, 2010

As announced in my StreamInsight session at 24HOP you can download the session material from here. Within the next weeks I will also provide a detailed weblog posting which describes the techniques I used in this sample.

Thanks

-Klaus

Friday, September 17, 2010 6:10:05 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQLServer
 Monday, August 30, 2010
19.-20. Oktober 2010, Rosenheim

 

SQLdays ist die Konferenz für die deutschsprachige SQL Server Community vom 19.-20. Oktober 2010 in Rosenheim. Freuen Sie sich auf drei parallele Tracks mit über 20 Sessions zu SQL Server Administration, Entwicklung und Business Intelligence. Treffen Sie Datenbank- und BI-Experten wie Klaus Aschenbrenner, Markus Raatz, Steffen Krause, Thomas Grohser oder Willfried Färber persönlich und erfahren Sie News aus erster Hand und wertvolle Tipps und Tricks aus der Praxis. In ganztägigen Workshops vor und nach der Konferenz haben Sie zudem die Gelegenheit spezielle Themen nochmal bis ins Detail zu vertiefen.

Sichern Sie sich jetzt Ihre Teilnahme unter www.SQLdays.net

Monday, August 30, 2010 11:10:07 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQL Server
 Saturday, June 26, 2010

As announced in my sessions and my workshop at the Solid Quality Summit in Vienna, you can download the materials from here:

Thanks for attending my sessions and have fun :-)

-Klaus

Saturday, June 26, 2010 9:45:16 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQL Server
 Monday, April 26, 2010

As announced in my Developer Camp workshop in Berlin you can download my workshop material from here:

Thanks for attending my workshop and have fun :-)

-Klaus

Monday, April 26, 2010 9:55:38 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET | .NET German | Conferences | SQL Server

As announced in my European PASS session you can download my session material from here:

Thanks for attending my session and have fun :-)

-Klaus

Monday, April 26, 2010 9:51:41 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET | .NET German | Conferences | SQL Server
 Saturday, February 27, 2010

As announced in my VSOne sessions and in my workshop you can download my session material from here:

Thanks for attending my sessions and have fun :-)

-Klaus

Saturday, February 27, 2010 5:24:49 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
.NET | Conferences | SQL Server
 Saturday, November 07, 2009

As announced in my FILESTREAM talk you can download my session material from here:

Have fun and thanks for attending my session :-)

-Klaus

Saturday, November 07, 2009 3:33:04 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
Conferences | SQL Server
 Saturday, October 03, 2009

As announced in my SQLdays sessions and in my workshop you can download my session materials from here:

Have fun :-)

-Klaus

Saturday, October 03, 2009 9:05:00 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET | .NET German | Conferences | SQL Server
 Thursday, August 20, 2009

SQL Server 2008 Developers Summit - Das Power-Event zur SQL Server 2008 Programmierung!
Lernen Sie konzentriert das, was Sie zur SQL Server 2008 Programmierung benötigen.
Sichern Sie sich diesen Herbst Ihren Technologievorsprung zum SQL Server 2008!

Zielpublikum:
SQL Server 2005 Programmierer/innen
Termine: Montag 14.12.2009 bis Freitag 18.12.2009
Ort: Palais Strudlhof, Pasteurgasse 1, A-1090 Wien, Anfahrtsinformationen
Kosten: € 1.300,00 (im Betrag ist keine Umsatzsteuer enthalten)
Es ist ein eigenes Notebook mitzubringen!

Tagesablauf:

  • 09:00 - 13:00 Workshops
  • 13:00 - 14.00 Mittagessen
  • 14:00 - 17:00 Workshops
  • Abends: Abendprogramm zum Ausklang des Tages
Das ergibt 5 x 8 Stunden gepowertes SQL Server 2008 Know-How zum Preis von nur € 1.300,00. Dieser Preis beinhaltet:
  • 5 Tage Power-Workshops zum .NET SQL Server 2008
  • Aktuelles Buch zum SQL Server 2008
  • Begrüßungskaffee/Tee
  • Vormittagsjause
  • 3-gängiges Mittagessen
  • Nachmittagsjause
  • Konferenzgetränke
Erfahren Sie alles, was Sie zur SQL Server 2008 Entwicklung in der tagtäglichen Arbeit benötigen!

Top-Themen:
  • Resource Governor
  • Policy based Management
  • Data Collector
  • Change Data Capture
  • T-SQL 2008
  • Business Intelligence Inside/Outside
  • Managed SQL Server 2008 Programmierung
  • Preview: SQL Server 2008 R2!

Weitere Informationen zum genauen Inhalt und zur Anmeldung finden Sie unter http://developers-summit.csharp.at

-Klaus

Thursday, August 20, 2009 6:13:21 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQL Server
 Saturday, June 20, 2009

After a long time of work, I finally finished today my presentations for the Solid Quality Summit which takes place next week here in Vienna. I’m presenting the following sessions:

  • ADO.NET Enhancements
  • Spatial Data support in SQL Server 2008
  • Service Broker Scaleout scenarios
  • T-SQL Enhancements in SQL Server 2008

On friday I’m doing a whole day workshop about the SQLCLR integration in SQL Server 2008. As you can see, I have a lot of work to do next week. I’m looking forward to next week, to see many good friends from Solid Quality :-)

-Klaus

Saturday, June 20, 2009 12:51:13 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQL Server
 Thursday, April 30, 2009

As announced in both of my sessions at the European PASS conference in Neuss/Germany last week, you can download the sample code here:

I hope you have enjoyed my sessions :-)

-Klaus

Thursday, April 30, 2009 3:21:09 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQL Server
 Wednesday, April 29, 2009

Wir nähern uns mit großen Schritten dem Solid Quality Summit vom 22. bis 26. Juni, dem SQL Server Event des Jahres in Wien. Nun ist auch der Session Schedule fixiert. Einige Mentoren wie Dejan Sarka, Davide Mauri oder Klaus Aschenbrenner schleifen auf der European PASS Conference in Neuss gerade Ihre Sessions zurecht, um für das anspruchsvolle Publikum in Wien optimal vorbereitet zu sein. Aber auch Itzik  Ben-Gan, dessen Buch „SQL Server 2008 Query Tuning“ soeben erschienen ist, Herbert Albert, Gianluca Hotz und die anderen Vortragenden scharen bereits in den Startlöchern, um Sie an ihren neuesten Erkenntnissen teilhaben zu lassen. Erleben Sie die einzigartige Kombination aus High-End Content und familiärer Atmosphäre beim Solid Quality Summit in Wien!

Alle Detailinformationen zum Summit finden Sie hier.

Anmeldeseite:.

Seminare:

Montag, 22.06.2009:
Itzik Ben-Gan: Inside T-SQL for SQL Server 2005 and 2008 (Room1)
Herbert Albert: Disaster Recovery (Room2)

Freitag, 30.06.2009:

Dejan Sarka: Data Modelling Essentials (Room1)
Klaus Aschenbrenner: Managed Code Development with SQL Server 2008 (Room2)

Session Schedule:

Day

Time

Speaker

Room1

Speaker

Room2

23.06.2009

09:00-10:15

Itzik Ben-Gan

Minimally Logged Inserts and other Data Modification Enhancements in SQL Server 2008

Dejan Sarka

Advances in Relational Databases

10:30-11:45

Aaron Johal

Help! My operational system is getting slower and slower!

Helmut Knappe

Implementing Many-to-many Relationships in SQL Server Analysis Services to Model Complex Business Solutions

13:30-14:45

Itzik Ben-Gan

Islands and Gaps Problems

Michael Sass

Meta Data Locks -  Analysis and Performance Problems

15:00-16:15

Aaron Johal

Using Visual Studio Team System 2008 Database Edition to resolve the data perception

Helmut Knappe

Charts in Reporting Services 2008

16:30-17:45

Itzik Ben-Gan

Advanced T-SQL Tips & Tricks

Andreas Schindler

Best Practice ETL

24.06.2009

09:00-10:15

Klaus Aschenbrenner

Scaleout scenarios with SQL Server & Service Broker

Dejan Sarka

Understanding XQuery,

10:30-11:45

Itzik Ben-Gan

Using the HIERARCHYID Datatype in SQL Server 2008

Davide Mauri

Set Based solution: an approach for developers

13:30-14:45

Klaus Aschenbrenner

T-SQL Erweiterungen im SQL Server 2008

Gianluca Hotz & Herbert Albert

Implementing SQL Server 2008 Policy Based Management

15:00-16:15

Itzik Ben-Gan

Aggregating Data in SQL Server 2008 Using Grouping Sets

Gianluca Hotz & Herbert Albert

SQL Server 2008 Policy Based Management and multi-server administration

16:30-17:45

Klaus Aschenbrenner

ADO.NET Enhancements für SQL Server 2005/2008

Davide Mauri

Instrumenting, Monitoring and Auditing of SSIS ETL Solutions

25.06.2009

09:00-10:15

Dejan Sarka

Design Myths

Andreas Schindler

Solving Business Problems with MDX

10:30-11:45

Helmut Knappe

Business Intelligence Myths

Aaron Johal

Why must I shoehorn my data into tables? I need total flexibility to develop in an agile way!

13:30-14:45

Dejan Sarka

Temporal Data in SQL Server 2008

Andreas Schindler

Change Management für Analysis Services Cubes

15:00-16:15

Gianluca Hotz

Oracle to SQL Server migration for Developers I

Helmut Knappe

Using Windows PowerShell in BI

16:30-17:45

Gianluca Hotz

Oracle to SQL Server migration for Developers II

Klaus Aschenbrenner

SQL Server 2008 und der GEOGRAPHY Datentyp

Preise:

Full Summit 5 Tage inkl. 1Day Classes(regulär): 1.990,00 Euro (exkl. Ust.)

Full Summit 5 Tage inkl. 1Day Classes(Early Bird): 1.790,00 Euro (exkl. Ust.)

Early Bird bis 11.05.2009

1Day Class only 590,00 Euro (exkl. Ust.)

Slim Conference 3 Tage 1.490,00 Euro (exkl. Ust.)

Anmeldung:

Für Gruppen ab 3 Teilnehmern gibt es spezielle Ermäßigungen. Näheres dazu erfahren Sie per Mail unter flechnitz@solidq.com bzw. am Telefon unter +43 (676) 5397927

Bitte beachten Sie bei der Anmeldung für 1Day Classes, dass Full Conference Teilnehmer bevorzugt behandelt werden, sollten die vorhandenen Plätze knapp werden.

Ort:

it-versity

Schottenfeldgasse 69

1070 Wien

Wir freuen uns darauf, Sie im Juni beim Solid Quality Summit 2009 in Wien, dem SQL Server-Event des Jahres begrüßen zu dürfen.

Wednesday, April 29, 2009 10:19:27 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | SQL Server
 Sunday, March 29, 2009

As announced in my session at the SQLBits conference in Manchester, you can download the sample code here. I hope you enjoyed my session and my attractive back :-)

-Klaus

Sunday, March 29, 2009 11:43:13 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
Conferences | SQL Server
 Wednesday, March 25, 2009

As announced in both of my sessions here at the DevWeek conference in London, you can download the sample code here. But the download files will be online on Sunday, when I'm returning to Vienna :-)

I hope you have enjoyed my sessions :-)

-Klaus

Wednesday, March 25, 2009 5:44:49 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
.NET | Conferences | SQL Server
 Thursday, March 12, 2009

Well, a very good question: the last months were very stressful for me, and therefore I had to take priorities, and blogging wasn't the number one priority. But things are changing. By now I'm trying to post a lot more than in the past (which is very easy, as you can see from the history of my blog...)

Since february I'm employed as an software architect & consultant at EDS, an HP company in Vienna. I've been now around 6 weeks with EDS, and it's very amazing to seen how such a global player is working. And also the combination with HP will be very nice - just trust me :-) Currently I'm doing a lot of SQL Server related stuff (my main topic, as you might already know), and also some things with .NET related technologies, evangelizing some great internal EDS technologies in Europe.

Here's also my upcoming conference schedule for the next weeks and months, where you can meet me face-2-face:

  • DevWeek Conference London, UK (23. - 27. march): I'm doing one session about ADO.NET enhancements for SQL Server 2005/2008 and one session about distributed applications with the .NET framework 3.5
  • European PASS Conference Neuss, Germany (23. - 24. april): I'm doing 2 session about SQL Server 2008: GEOGRAPHY data type and T-SQL enhancements
  • Solid Quality Summit Vienna (June): I'm doing 4 (!) SQL Server related sessions together with my very good friends at Solid Quality Learning

See you!

-Klaus

Thursday, March 12, 2009 10:17:02 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
.NET | .NET German | Conferences | Personal

A few minutes ago I finished my preparations for the upcoming DevWeek conference by the end of March in London, UK. One topic that I'll be talking about is building a fully distributed .NET application based on the .NET framework 3.5 technologies, WCF, WF, and WPF.

I'll show the following things:

  • How to use the "Workflow Services" technology from the .NET framework 3.5
  • How to store workflow definitions in a database, so that business analysts can change them according to their (changing) business requirements
  • How to write a workflow designer, that can be used by the business analysts to change the workflow definitions that are stored in the database
  • How to use the workflow monitor application from the SDK to monitor the current running and closed workflow instances
  • How to use the TrackingProfileDesigner application from the SDK to configure tracking profiles for the running workflow instances

All in all: it's just an awesome sample how to use the current .NET framework 3.5 technology stack!

See you there!

-Klaus

Thursday, March 12, 2009 10:08:37 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
.NET | .NET German | Conferences
 Thursday, May 15, 2008

Thanks for attending my sessions at the DevTeach conference in Toronto/Canada this week. As announced in all my sessions, you can download the whole material (Slides & Demos) for my sessions here:

  • Message in a bottle: Service Broker from 1 to 100
  • Service Broker Enhancements in SQL Server 2008
  • Workflow driven Service Broker solutions
  • SQL Server 2008 & the GEOGRAPHY data type

-Klaus

Thursday, May 15, 2008 7:33:41 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
ANECON | Conferences | SQL Server
 Sunday, April 27, 2008

Thanks for attending my session about Team Build 2008 at the Team System Conference in Munich/Germany this week. As announced in my session, you can download the slides here. Enjoy it! :-)

-Klaus

Sunday, April 27, 2008 8:48:55 AM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | Conferences | Team System
 Thursday, April 17, 2008

Thanks for attending my sessions at the European PASS conference in Neuss/Germany this week. As announced in both of my sessions, you can download the whole material (Slides & Demos) for both sessions here. Enjoy it! :-)

 

-Klaus

Thursday, April 17, 2008 7:02:31 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [1] - Trackback
.NET German | ANECON | Conferences | SQL Server
 Tuesday, April 15, 2008

Lernen Sie konzentriert das, was Sie zur BI Programmierung mit dem SQL Server 2008 benötigen.
Sichern Sie sich Ihren Technologievorsprung zur SQL Server 2008 BI Programmierung bereits diesen Sommer!

Zielpublikum:
SQL Server 2000/2005 Programmierer
Termine: Montag 02.06.2008 bis Freitag 06.06.2008
Ort: Palais Strudlhof, Pasteurgasse 1, A-1090 Wien, Anfahrtsinformationen
Kosten: € 1.300,00 (im Betrag ist keine Umsatzsteuer enthalten)
Rabatt: Ab 3 Anmeldungen pro Firma wird Ihnen ein Rabatt von 10% pro Teilnehmer gewährt!

Es ist ein eigenes Notebook mitzubringen!

Tagesablauf:

  • 09:00 - 13:00 Workshops
  • 13:00 - 14.00 Mittagessen
  • 14:00 - 18:00 Workshops
  • Abends: Abendprogramm zum Ausklang des Tages
Das ergibt 5 x 8 Stunden gepowertes SQL Server 2008 BI Know-How zum Preis von nur € 1.300,00. Dieser Preis beinhaltet:
  • 5 Tage Power-Workshops zur SQL Server 2008 BI Programmierung
  • Begrüßungskaffee/Tee
  • Vormittagsjause
  • 3-gängiges Mittagessen
  • Nachmittagsjause
  • Konferenzgetränke

Erfahren Sie alles was Sie zur SQL Server 2008 BI Entwicklung in der tagtäglichen Arbeit benötigen!

Warum teilnehmen?
Mit dem SQL Server 2008 stellt Microsoft eine umfassende Entwicklungsumgebung für Business Intelligence Anwendungen auf der Microsoft Plattform zur Verfügung. Das SQL Server 2008 BI Developers Summit ist daher eine ausgezeichnete Möglichkeit, sich schnell und praxisgerecht auf die BI Programmierung mit dem SQL Server 2008 ausbilden zu lassen. Bei dem Speaker (Willfried Färber, SQL Server MVP) handelt es sich um einen international anerkannten Experten, der sich bereits seit über 10 Jahren mit dem SQL Server und der Business Intelligence Entwicklung beschäftigt, und daher bereits umfangreiches Know-How aufbauen konnte und dieses in ausgezeichneter Qualität an die Teilnehmer weitergibt.

Top-Themen:

  • Theoretischer Hintergrund zu Data Marts und dem Data Warehouse
  • Planung, Konzept und Entwurf eines Data Warehouse
  • Einführung in die Integration Services
  • Erstellen von Ladejobs für ein Data Warehouse
  • Einführung in die Analysis Services
  • Einführung in MDX
  • Erstellung und Validierung eines Cubes

Weitere Informationen finden Sie unter der Event-Homepage.

-Klaus

Tuesday, April 15, 2008 7:26:13 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
.NET German | ANECON | Conferences | SQL Server
 Monday, March 17, 2008

Thanks for attending one of my SQL Service Broker sessions at the DevWeek Conference in London last week. As announced in both of my sessions, you can download the whole material (Slides & Demos) for both SQL Service Broker sessions here. Enjoy it! :-)

-Klaus

Monday, March 17, 2008 7:48:00 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
Conferences | SQL Server
 Friday, February 22, 2008

Within the next months I'm doing some sessions at several conferences around the world:

  • DevWeek Conference (March 11 - March 14, London/UK)
    • Building asynchronous, distributed Service Broker applications
    • Scaleout scenarios with Service Broker
  • Team System Conference (April 22 - April 24, Munich/Germany)
    • Using Team Build 2008
  • European SQLPASS Conference (April 14 - April 16, Neuss/Germany)
    • ADO.NET Enhancements for SQL Server 2005
    • SQL Server 2008 and the GEOGRAPHY data type
  • DevTeach Conference (May 12 - May 16, Toronto/Canada)
    • Building asynchronous, distributed Service Broker applications
    • Service Broker enhancements in SQL Server 2008
    • Workflow driven Service Broker solutions

I'm looking forward to meet you at one of these events :-)

-Klaus

Friday, February 22, 2008 8:26:22 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
.NET German | ANECON | Conferences
 Wednesday, November 28, 2007

In the next 2 days I'm presenting 3 SQL Service Broker sessions at the DevTeach conference in Vancouver:

  • Message in a bottle: Service Broker from 1 to 100
  • Workflow driven Service Broker Solutions
  • Smart Client solutions with Service Broker

You can download here my slides and the samples.

-Klaus

Wednesday, November 28, 2007 12:13:44 AM (Westeuropäische Zeit, UTC+00:00)  #    Comments [1] - Trackback
ANECON | Conferences | SQL Server
 Monday, November 05, 2007

Heute und morgen halte ich 2 Vorträge zum SQL Service Broker bei den SQLdays in München:

  • Verteilte, zuverlässige Anwendungs-Architekturen mit dem SQL Service Broker
  • Zuverlässige Smart Clients mit dem SQL Service Broker

Unter http://www.csharp.at/downloads/sqldays2007.zip finden Sie meine Präsentationen und Beispiele zum Download. Ich würde mich über Ihr Feedback zu den Vorträgen sehr freuen.

-Klaus

Monday, November 05, 2007 3:22:31 PM (Westeuropäische Zeit, UTC+00:00)  #    Comments [0] - Trackback
.NET German | ANECON | Conferences | SQL Server
 Wednesday, August 29, 2007

Today I've started with the demo preparations for my upcoming spotlight session "Scaleout scenarios with Service Broker" for the SQLPASS Community Summit in Denver (September 18 - 21). In this session I'll show you how you can scale out an existing Service Broker application to any required size. In detail you'll see:

  • Load balancing: I'll take a SSB TargetService and implement load-balancing between different SQL Server machines
  • Message Forwarding: After the first step (load balancing), the Initiator Service will communicate with a Message Forwarding Service, which forwards the request to the real TargetService. Because of this your internal network topology is completely isolated from your business partners.
  • Configuration Notice Service: In the last and final step I'll implement a Configuration Notice Service for the Message Forwarder, so that the routes to the internal hosted services are created on demand. Therefore you have the chance to dynamically move your SSB services inside your environment.

What do you think? What kind of scale out scenarios would you will see in my session?

Thanks

-Klaus

Wednesday, August 29, 2007 5:07:33 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [1] - Trackback
ANECON | Conferences | SQL Server
 Friday, April 13, 2007

In the last weeks Georg Drobny (Application Development Consultant from Microsoft Austria) and I presented a session about Visual Studio 2005 Team System at the Microsoft Big>Days. The Big>Days were on 4 different locations around Austria:

  • Bregenz
  • Linz
  • Graz
  • Wien

 

-Klaus

Friday, April 13, 2007 12:45:13 PM (Westeuropäische Sommerzeit, UTC+01:00)  #    Comments [0] - Trackback
ANECON | Conferences
About the author/Disclaimer

Klaus Aschenbrenner provides independent SQL Server Consulting Services across Europe.

Klaus works with the .NET Framework and especially with the SQL Server 2005/2008 from the very early beginnings.

In the years 2004 - 2005 Klaus was entitled with the MVP award from Microsoft for his tremendous support in the .NET Community.

Klaus has also written the book Pro SQL Server 2008 Service Broker which was published by Apress in the Summer of 2008.



Contact
Klaus Aschenbrenner
Pichlgasse 16/6
A-1220 Vienna
Austria

© Copyright 2012
Klaus Aschenbrenner
Sign In
Archive
<February 2012>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910
Statistics
Total Posts: 231
This Year: 0
This Month: 0
This Week: 0
Comments: 145
Themes
Pick a theme:
All Content © 2012, Klaus Aschenbrenner
DasBlog theme 'Business' created by Christoph De Baene (delarou)