Freitag, November 26, 2010

Segment compression und pctfree

Ein kurzer Test zum Verhältnis von segment compression und PCTFREE-Einstellung von Tabellen.

Zur Erinnerung: segment compression ist das seit 9i verfügbare Feature zur Komprimierung von Tabellen, das wiederholte Einträge innerhalb eines Blocks durch Platzhalter ersetzt. Es funktioniert nur für direct path inserts, direct path SQL*Loader- und CTAS-Operationen. Nicht zu verwechseln ist es mir der (kostenpflichtigen) advanced compression in Version 11, die alle DML-Operationen unterstützt.

Über PCTFREE steuert man den initialen Füllgrad einer Tabelle, gibt also an, wie viel Platz zunächst frei bleiben soll, damit folgende UPDATEs nicht zu Row-Migration führen.

Mein Test prüft, wie sich die Größe einer Tabelle abhängig vom Einsatz der beiden Optionen verändert:

-- Anlage einer Testtabelle mit drei Spalten,
-- von denen col2 immer gleich gefüllt ist
-- und gut komprimierbar sein sollte
create table test
as
select rownum rn
     , mod(rownum , 10) col1
     , lpad('*', 50, '*') col2
  from dual
connect by level < 100000

Über CTAS erstelle ich nun mehrere Kopien dieser Tabelle mit unterschiedlichen PCTFREE- und compress-Einstellungen:

create table test_pctfree0_nocompress pctfree 0
as
select *
  from test;

create table test_pctfree0_compress pctfree 0 compress
as
select *
  from test;

create table test_pctfree50_nocompress pctfree 50
as
select *
  from test;

create table test_pctfree50_compress pctfree 50 compress
as
select *
  from test;

-- Erzeugung von Statistiken für alle Tabellen
exec dbms_stats.gather_table_stats(user, 'TEST_PCTFREE0_COMPRESS') 
...

In USER_TABLES finden sich nun folgende Block-Angaben:

TABLE_NAME                       PCT_FREE     BLOCKS
------------------------------ ---------- ----------
TEST                                   10        451  -- Standardwert: PCTFREE 10
TEST_PCTFREE0_NOCOMPRESS                0        406  -- 451 minus 10%
TEST_PCTFREE50_NOCOMPRESS              50        811  -- 406 * 2
TEST_PCTFREE0_COMPRESS                  0         82  -- ca. 20% von 406
TEST_PCTFREE50_COMPRESS                50        158  -- ca. 20% von 811

Die Zahlen entsprechen recht exakt den Erwartungen: die Kompression reduziert die Netto-Datenmenge (im gegebenen Fall auf ca. 20%) und PCTFREE sorgt dann dafür, dass jeder Block den vorgesehenen Erweiterungsspielraum erhält. Die beiden Features sind also unabhängig voneinander.

Freitag, November 19, 2010

Star Transformation

Die Leute von der cbo-Entwicklung erläutern hier die Arbeitsweise der Star Transformation. Grob vereinfacht geht es darum, die Einschränkungen der Dimensionstabellen über bitmap and und bitmap or zu kombinieren, und schließlich nur die relevanten Sätze aus der Faktentabelle zu lesen.

Nachtrag 27.07.2011: ein kompaktes Beispiel für die Voraussetzungen der Star Transformation liefert Laurent Schneider.

Montag, November 15, 2010

Crescent, Denali und die Zukunft von Microsofts BI-Lösungen

Dieser Tage wurden auf dem PASS Summit 2010 der nächste SQL Server Denali und die neue Reporting-Lösung Crescent vorgestellt. Zu letzterer haben sich die Marketing-Kollegen von Microsoft folgendes Sprüchlein einfallen lassen:
Project “Crescent” expands on the Self-Service BI capabilities delivered with PowerPivot for Excel by enabling customers to visualize and interact with the modeled data in a fun and meaningful way using highly interactive visualizations, animations and smart querying and present and share insights with others in the organization through rich storyboard presentation capabilities.
Was man sich unter "a fun and meaningful way" vorstellen muss, zeigt auch das bunte Video unter http://blogs.msdn.com/b/bi/archive/2010/11/09/data-visualization-done-right-project-crescent.aspx.

Nun ja, ein neues Reporting-Tool, das sich gut mit PowerPivot versteht, hätte mich nicht besonders lange beschäftigt, aber dann meldeten sich einige der wichtigsten SSAS-Experten zu Wort, die die Tragweite der neuen Produktentwicklung klarer erläuterten. Zunächst Teo Lachev:
Alas, my excitement about Crescent, which I blogged about yesterday, ebbed as more news from PASS unfolded and I learned that Crescent will not support regular cubes. Yep, you've heard me right! Crescent generates DAX queries, which only work against the new Business Intelligence Semantic Model (BISM). What's BISM? It is the ambitious PowerPivot column-oriented store that got promoted from self-service BI to corporate BI. With a whiff of their magic hand, the SSAS team are about to put behind 15 years of traditional OLAP and MDX in favor of a new model.
BISM und das im SSAS verwendete Modell UDM passen offenbar nicht zusammen und werden nur durch die Klammer des OLAP-Servers zusammengehalten, in dem folglich mit MDX und DAX auch zwei Sprachen verwendet werden, die nicht ohne Weiteres zusammenpassen. Noch deutlicher wurde dann Chris Webb:
So this is a radical departure for Microsoft BI, one that could go badly wrong, but I can understand the reasoning for it. I’ve been impressed with the technology I’ve seen over the last few days and I know that if anyone can pull this off, the SSAS dev team can. However, the fact remains that in the short term BISM models won’t be able to handle many enterprise projects; SSAS cubes, which can, will be seen as a bad choice because they have no long-term future; and we’re all going to have to tie ourselves in knots explaining the roadmap and the positioning of these products to all of our customers.
Die offizielle Sicht auf die schönen neuen Microsoft-BI-Tools liefert http://blogs.technet.com/b/dataplatforminsider/archive/2010/11/12/analysis-services-roadmap-for-sql-server-denali-and-beyond.aspx, aber ich lese darin vor allem eine Bestätigung dessen, was Chris Webb sagt. Seit drei Jahren beschäftige ich mich jetzt mit den SSAS und MDX - und jetzt, wo ich halbwegs weiß, was ich tue, sieht's so aus, als hätte diese Welt keine besonders große Zukunft mehr. Schade.

Mittwoch, November 10, 2010

View-Merging

Im Blog der cbo-Entwickler finden sich in letzter Zeit einige interessante Erläuterungen zu Strategien des Optimizers. Unter anderem wurde das View-Merging in zwei Artikeln beleuchtet: