Konvertierung aus Julianischem Kalender

Posted on Jul 13, 2004 von in SQL Server
DECLARE @yr INT
DECLARE @jd INT
SELECT @yr = 2002, @jd = 245
SELECT DATEADD(yyyy, @yr - 1900, -1) + @jd AS Julian_Date

Julian_Date
------------------------------------------------------
2002-09-02 00:00:00.000

(1 row(s) affected)

Danke an Jonathan Van Houtte.

Sekunden in Minuten umwandeln

Posted on Jul 13, 2004 von in SQL Server
DECLARE @sekunden INT
SET @sekunden = 61
SELECT
CONVERT(VARCHAR(2), FLOOR(@sekunden/60)) +
':' +
RIGHT('0' + CONVERT(VARCHAR(2), (@sekunden%60)), 2)


-----
1:01

(1 row(s) affected)

AWE Memory SQL Server Performance Tuning Tips

Posted on Jul 13, 2004 von in SQL Server

Original von Brad M. McGehee; deutsche Übersetzung von Frank Kalis

Falls Sie SQL Server 2000 Standard Edition unter Windows NT 4.0 oder Windows 2000 (alle Versionen) oder SQL Server 2000 Enterprise Edition unter Windows NT 4.0 oder Windows 2000 Server betreiben oder Ihr Server 4 GB RAM oder weniger RAM hat, sollte die "awe enabled" Option auf ihrem Standardwert von 0 belassen werden. Dies bedeutet, dass AWE nicht verwendet wird.

Das AWE (Advanced Windowing Extensions) API ermöglicht Applikationen (die dafür geschrieben wurden) unter Windows 2000 Advanced Server oder Windows 2000 Datacenter Edition mehr als 4 GB RAM zu adressieren. SQL Server 2000 Enterprise Edition (nicht die Standard Edition) ist AWE-fähig und kann damit mehr als 4 GB RAM eines Servers nutzen. Ist das Betriebssystem Windows 2000 Advanced Server, kann SQL Server 2000 Enterprise Edition bis zu 8 GB RAM adressieren. Ist das Betriebssystem Windows 2000 Datacenter Edition kann SQL Server 2000 Enterprise Edition bis zu 64 GB RAM verwenden.

Standardeinstellung jedoch ist, dass SQL Server 2000 Enterprise Edition unter Windows 2000 (Advanced oder Datacenter) auf einem physikalischen Server nicht mehr als 4 GB RAM ansprechen kann; auch wenn der Server über mehr RAM verfügt. Damit das Betriebssytem und SQL Server 2000 Enterprise Edition nun dieses zusätzliche RAM adressieren können, müssen zwei Schritte ausgeführt werden.

Wie Sie genau die AWE Memory Unterstützung konfigurieren, hängt davon ab, wieviel RAM ihr Server hat. Um Windows 2000 (Advanced oder Datacenter) zu konfigurieren, müssen Sie einen der folgenden beiden Schalter in die Boot Zeile der boot.ini Datei eingeben und den Server neu starten.

  • 4 GB RAM: /3GB (AWE Unterstützung wird nicht konfiguriert)
  • 8 GB RAM: /3GB /PAE
  • 16 GB RAM: /3GB /PAE
  • 16 GB + RAM: /PAE

Der /3GB Schalter wird benutzt, um mitzuteilen, dass SQL Server 3 der 4 GB Basis RAM verwenden kann, die Windows 2000 nativ unterstützt. Geben Sie diese Option nicht an, nutzt SQL Server nur 2 GB der ersten 4 GB RAM des Servers, essentiell wird damit 1 GB RAM verschwendet.

AWE Memory Technologie wird nur für den Teil des RAM benutzt, der die Basis von 4 GB RAM überschreitet. Aus diesem Grund wird der /3GB Schalter verwendet, damit Sie soviel RAM Ihres Servers wie möglich verwenden können. Hat Ihr Server weniger als 16 GB RAM ist es wichtig, den /3GB Schalter zu benutzen. Hat Ihr Server hingegen mehr als 16 GB RAM, müssen Sie diesen Schalter nicht angeben. Der Grund hierfür ist, dass das Betriebssystem den 1 GB zusätzlichen RAM, der durch den /3GB Schalter bereitgestellt wird, benötigt, um das komplette zusätzliche AWE Memory zu managen, falls Ihr Server über mehr als 16 GB RAM verfügt.
Sind 16 GB oder weniger in einem Server, braucht das Betriebssystem nur 1 GB RAM, so dass SQL Server das andere GB RAM verwenden kann.

Ist dieser Schritt ausgeführt, ist der nächste Schritt, die "awe enabled" Option in SQL Server 2000 Enterprise Edition auf 1 zu setzen und anschliessend den SQL Server Dienst neu zu starten. Nur dadurch ist SQL Server in der Lage, das zusätzliche RAM zu verwenden.

Ein Hinweis zur Verwendung der "awe enabled" Einstellung. Nachdem diese eingeschaltet ist, managt SQL Server nicht mehr dynamisch den Arbeitsspeicher. Stattdessen verwendet SQL Server sämtlichen verfügbaren RAM (bis auf ca. 128 MB, das für das Betriebssystem übrig gelassen wird). Wollen Sie verhindern, dass SQL Server sämtliches RAM für sich beansprucht, müssen Sie die "max server memory" (wird weiter unten ausführlich beschrieben) auf den Wert setzen, den Sie SQL Server zugestehen wollen (7.0, 2000) Aktualisiert 02.01.2004

Für den Fall, dass Sie das Gefühl haben, dass Ihr Arbeitsspeicher zum Flaschenhals wird, und unter der Voraussetzung, dass Sie Geld zum Ausgeben haben; SQL Server 2000 Enterprise Edition kann bis zu 64 GB RAM unterstützen. Wieviel Speicher tatsächlich genutzt werden kann, hängt ab von Ihrer Windows 2000 oder Windows 2003 Version und davon, wieviel RAM Ihr Server unterstützt. Ist Ihr Server dafür ausgelegt, unterstützt SQL Server 2000 Enterprise Edition bis zu 8 GB unter Windows Advanced Server und bis zu 64 GB unter Windows Datacenter.

32-bit CPU's wie die Pentium Prozessorenfamilie unterstützen aufgrund ihres limitierten Adressraumes normalerweise nur bis zu 4 GB RAM. Un nun diese Begrenzung zu umgehen, unterstützt SQL Server 2000 Enterprise Edition ein Feature namens AWE (Advanced Windowing Extensions), das bis zu 64 GB RAM adressieren kann.

Angenommen, Sie konfigurieren die entsprechende Hard- und Software, so ist AWE Support nicht automatisch eingeschaltet. Sie müssen die 'awe enabled' erweiterte SQL Server 2000 Option von 0 auf 1 setzen, um die AWE Unterstützung zu aktivieren. Zum Beispiel. folgendermassen:

SP_CONFIGURE 'show advanced options', 1
RECONFIGURE
GO
SP_CONFIGURE 'awe enabled', 1
RECONFIGURE
GO

AWE Memory kann nicht dynamisch verwaltet werden, so wie SQL Server normalerweise Speicher managt. Konkret heisst das, dass SQL Server beim Start automatisch sämtlichen Speicher beansprucht, der vorhanden ist (bis auf ca. 128 MB, die für das Betriebssystem reserviert sind). Dieser Speicher wird auch nicht eher freigegeben, bis SQL Server beendet wird. Ist Ihr Server ein dedizierter SQL Server ist dies wahrscheinlich auch in Ordnung. Läuft hingegen noch andere Software auf dem Server oder mehrere Instanzen von SQL Server, dann müssen Sie die maximale Menge RAM angeben, die SQL Server beanspruchen kann, wenn er startet. Dies wird die 'max server memory' Konfigurationsoption erreicht. Ändern Sie diese Einstellung müssen Sie den msssqlserver Dienst neu starten, damit die Änderung wirksam wird.

Um die maximale Menge an Speicher anzugeben, auf die AWE Memory Zugriff hat, benutzen sie SQL Server's 'max server memory' Konfigurationsoption wie folgt:

SP_CONFIGURE 'max server memory', 4096
RECONFIGURE
GO

Mit obigem Beispiel teilen wir SQL Server mit, nur 4 GB RAM zu verwenden und alles restliche verfügbare RAM im Server für andere Applikationen frei zu lassen.

Obwohl mehrere Instanzen von SQL Server mit AWE Memory betrieben werden können, ist dies nicht unbedingt erstrebenswert, da das Management Kopfschmerzen bereiten kann. Tatsächlich steht das Betreiben mehrerer Instanzen von SQL Server in AWE Memory dem Sinn von mehr RAM entgegen. Generell sollte Ihr Ziel beim Gebrauch von AWE Memory sein, eine einzelne sehr grosse Instanz von SQL Server zu unterstützen, nicht viele kleinere Instanzen auf einem einzelnen Server.

Angenommen, Sie verfügen über das Budget, kann das Hinzufügen grosser Mengen RAM viele Datenbanken deutlich beschleunigen (7.0, 2000) Aktualisiert 02.01.2004.

Microsoft betrachtet AWE Memory als Premium Feature; deshalb wird es nicht in allen Versionen von Windows 2000 und SQL Server 2000 angeboten. Es folgt eine Tabelle der verschiedenen Versionen von Windows 2000 und SQL Server 2000, die zeigt, ob und wieviel AWE Memory unterstützt wird.

 

Windows
Version

SQL 2000
Enterprise Edition

SQL 2000
Standard

SQL 2000
Personal

SQL 2000
Developer

Windows 2000
Datacenter Server

64 GB

2 GB

2 GB

64 GB

Windows 2000
Advanced Server

8 GB

2 GB

2 GB

8 GB

Windows 2000
Server

4 GB

2 GB

2 GB

4 GB

Windows 2000
Professional

N.A.

N.A.

2 GB

2 GB

Jede der obigen Kombinationen über 4 GB wird durch AWE Memory unterstützt. Wollen Sie AWE Memory einsetzen, haben Sie keine andere Wahl, als Microsoft's Premium-teure Produkte zu kaufen.

Wenn Sie AWE Memory einsetzen, können Sie die Performance durch einige spezielle Performance Monitor Counter verfolgen, die Sie unter dem Server Buffer Manager Objekt finden. diese schliessen ein:

  • AWE Lookup Maps/sec: Dieser Counter misst, wie oft eine spezielle Datenbankseite, die von SQL Server angefordert wurde im Buffer Pool gefunden wurde und als AWE Memory gemappt wurde (oder SQL Server's Virtuellem Adressraum). Dies wäre dann eine Kombination der AWE StolenMaps/sec und AWE WriteMaps/sec, die später beschrieben werden.
  • AWE Stolen Maps/sec: Dieser Counter misst, wie oft ein freier Datenbank buffer von SQL Server angefordert wurde und als AWE Memory gemappt wurde.
  • AWE Write Maps/sec: Wenn SQL Server keinen freien Buffer mehr hat, die als AWE Meomry gemappt werden können, muss er stattdessen in einen dirty Buffer schreiben, was Performance vermindert, da ein Schreibvorgang auf die Platte erfolgen muss, um den dirty Buffer aufzuräumen, bevor dieser benutzt werden kann. Dieser Counter misst die Zeit, wie lange SQL Server zu diesem dirty Buffer mappen muss. Ist diese Zahl hoch, sollte mehr Speicher in Betracht gezogen werden.
  • AWE Unmap Call/sec: Manchmal kommt es vor, dass SQL Server Mappings von Buffer aus dem AWE memory löst (z.B, weil sie länger nicht verwendet wurden). Dieser Counter misst, wie oft SQL Server eine solche Operation anfordert, die ein oder mehrere Buffer gleichzeitig betreffen können.
  • AWE Unmap Pages/sec: Eng verbunden mit dem vorangegangenen Counter misst dieser Counter speziell die Anzahl von SQL Server Buffer, deren Mapping als AWE Memory gelöst wurde.

(7.0, 2000) Aktualisiert 02.01.2004.

Den Originalartikel finden Sie hier

Log Datei auslesen

Posted on Jul 13, 2004 von in SQL Server

SQL Server selber bietet hier einen undokumentierten DBCC Befehl an

DBCC log ( {dbid|dbname}, [, type={-1|0|1|2|3|4}] )

type zeigt nur minimale Informationen an, -1 zeigt die vollständigen Informationen an

Allerdings ist anzumerken, dass für Normalsterbliche der Inhalt der Log Datei schwer zu lesen und zu verstehen ist. Es empfiehlt sich, hier ein paar Euros auszugeben für Third-Party Tools wie den LogExplorer von Lumigent.

Laufende Summe in T-SQL

Posted on Jul 13, 2004 von in SQL Server
IF OBJECT_ID('lfdsum_t') IS NOT NULL
     DROP TABLE lfdsum_t
GO
CREATE TABLE lfdsum_t (col1 int)
INSERT INTO lfdsum_t values (1);
INSERT INTO lfdsum_t values (2);
INSERT INTO lfdsum_t values (3);
INSERT INTO lfdsum_t values (4);
INSERT INTO lfdsum_t values (5);

SELECT 
     a.COL1
     ,(SELECT 
          Sum(b.col1)
     FROM
          lfdsum_t b
WHERE 
          b.col1 <= a.col1) lfd_Sum
FROM 
     lfdsum_t a
DROP TABLE lfdsum_t

COL1        lfd_Sum     
----------- ----------- 
1           1
2           3
3           6
4           10
5           15

(5 row(s) affected)

Zugegebenermassen bin ich mir nicht sicher, ob der technische Begriff dafür 'laufende Summe' ist. Für Anregungen zu einem treffenderen Begriff bin ich dankbar.

Wofür ist xp_servicecontrol?

Posted on Jul 13, 2004 von in SQL Server

xp_servicecontrol ist eine undokumentierte erweiterte Prozedur, die zur Kontrolle von Diensten auf der SQL Server Maschine eingesetzt werden kann.

Ganze Geschichte »

Instanzen von SQL Server identifizieren

Posted on Jul 13, 2004 von in SQL Server

Für alle diejenigen, die noch wissen was die DOS Eingabeaufforderung ist :)

Ganze Geschichte »

DATETIME Spalten gruppieren und sortieren

Posted on Jul 13, 2004 von in SQL Server
SELECT
 DATEADD(day, 0 , DATEDIFF(day, 0, MsgDateReceived)) AS "Datum"
 , COUNT(*) AS Anzahl
FROM mails_header
GROUP BY
 DATEADD(day, 0 , DATEDIFF(day, 0, MsgDateReceived))
ORDER BY
 "Datum" DESC