Posts Tagged ‘ Database

Neue Version des Database Tuning Plugins

Dietmar Rabich hat für seine beiden Plugins Database Tuning und Meta Information ein Update herausgebracht, so dass diese nun auch mit der aktuellen WordPress-Version 2.3 zusammenspielen.

Und somit läuft auch endlich das letzte Plugin in meinem Blog unter WP2.3. Bleibt mir eigentlich nur noch zu sagen: Keep up the good work! :)

Backup-Woche bei WordPress-Deutschland

Pro-BackupUnd wo ich gerade schon bei Datenbanken und Backup bin:

WordPress-Deutschland veranstaltet vom 5. bis 11. März 2007 die Backup-Woche.

In der Backup-Woche werden wir darauf hinweisen, wie wichtig das regelmäßige Anlegen von Backups ist. Wir geben Tipps und Tricks und wollen das Thema mit euch diskutieren. Damit das Thema möglichst viele Leute erreicht bitten wir euch, daß Thema in euren Blogs anzusprechen. [blog.wordpress-deutschland.org]

Dem Aufruf folge ich doch gerne, denn gerade das Thema Backup ist ja nicht gerade unwichtig. Ok, persönlich bin ich ja eher einer von der vorsichtigen – um nicht zu sagen paranoiden – Sorte und mache lieber ein Backup zu viel, als eins zu wenig.

Das sieht bei mir dann wie folgt aus: alle 24 Stunde läuft automatisch eine leicht modifizierte Version des “AutoMySQLBackup-Scripts” und sichert alle Datenbanken meines MySQL-Servers. Zusätzlich werden alle 7 Tage die MySQL-Backups der kompletten Woche sowie die kompletten DocumentRoots, diverse Configs, LogFiles etc. mittels rsync auf einen 2. Server gesichert. Anstatt rsync hätte man natürlich auch die Files per ftp/sftp sichern können, doch rsync hat einen großen Vorteil: nach dem ersten Backup müsse nur noch die veränderten Files gesichert werden. Das ist nicht nur außerst kompfortabel sondern spart bei kompletten Webseiten vorallem Traffic.

Das ganze wird dann noch durch einen BackUp-Job meines VPS-Hosters kompletiert, der alle 7 Tage den komplette Server auf einen 2 Rechner sichert.

Zugegeben, vielleicht etwas paranoid, aber besser vorsorgen als nachsorgen!

Übrigens, wer selbst über die Backup-Woche berichtet und einen Trackback auf Pro-Backup oder das WordPress-Deutschland Blog setzt, nimmt automatisch an einer Verlosung von 5 mal »phpMyAdmin kompakt« und 5 mal »XAMPP kompakt« teil.

Das bisherige Ergebnis der Umfrage auf www.pro-backup.de finde ich übrigens äußerst erschreckend … zumindest was die Verteilung der Votings angeht. Nun ja .. spätestens nach dem ersten Crash werden auch die “Niemals”-Voter sich ihre Wahl noch einmal genauer überlegen *G*

WordPress-Plugin „Database Tuning“

Gerade bin ich auf das WordPress (WP) Plugin „Database Tuning“ von Dietmar Rabich gestoßen. Das Plugin ist ein kleiner Wartungs- und Optimierungshelfer für die Tabellen und Indizes der WP-Datenbank. Zusätzlich können noch weitere Indizes zur Steigerung der Performance angelegt werden.

Rein subjektiv läuft mein WP nach einem Durchlauf (ohne alternative Indizes) eine ganze Ecke schneller, aber wie gesagt, rein subjektiv. Leider fehlt mir IMO die Zeit, die Optimierung mit den alternativen Indizes noch etwas gründlicher zu testen, doch das Plugin gehört auf jeden Fall in die Katorgorie “MustHave”. Aber Achtung, vor der Optimierung ein DB-Backup nicht vergessen … man weiss ja nie :)

Besitzstandwechsel von Tabellen leicht gemacht

Will man bei einer Datenbank eines MS SQL-Servers die Besitzrechte aller Datenbanken ändern, so kann man dieses bekannter weise über “Rechtsklick->Alle Tasks->Berechtigungen verwalten” erledigen.

Soll der Besitzer aller Tabellen einer Datenbank geändert werden, ist dieses Vorgehensweise allerdings suboptimal. Besser und vor allem schneller geht es in einer solchen Situation mit

sp_MSForEachTable ‘sp_changeobjectowner ‘‘?’‘,’‘NeuerBesitzer’

Leider funktioniert diese Methode nicht bei Stored Procedures (SP), hier reicht es allerdings aus, für alle SP ein SQL-Script zu generieren und überall, wo der Benutzer mittels setuser gesetzt wird, diesen gegen den neuen Benutzer auszutauschen (setuser N’NeuerBesitzer’).

Alle Spaltennamen einer MSSQL Tabelle ausgeben lassen

Geht eigentlich ganz einfach wenn man weiß wie:

SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ‘foo’

Alle, und ich meine wirklich alle, Tabellennamen, Spaltennamen sowie deren Datentyp und Länge kann man sich übrigends mit

SELECT
        table_name=sysobjects.name,
        column_name=syscolumns.name,
        datatype=systypes.name,
        length=syscolumns.length
FROM
        sysobjects
                JOIN syscolumns ON sysobjects.[id] = syscolumns.[id]
                JOIN systypes ON syscolumns.xtype=systypes.xtype
WHERE
        sysobjects.[xtype]=‘U’
ORDER BY
        sysobjects.[name],
        syscolumns.colid

ausgeben lassen … aber das nur mal am Rande :)

Array an eine Stored Procedure übergeben

Ein Array kann man bekannter Maßen nicht an eine Stored Procedure übergeben. Notnagel wäre an dieser Stelle eine kommaseparierte Liste von String-Parametern als IN-Parameter.

Einen interessanten Ansatz dazu hat Daniel Müller in seinem .NET – Software & DotNetNuke (DNN) Blog gefunden. Mittels einer User Defined Function(UDF) macht er aus den nvarchar Parameter eine “Tabelle”, die er dann ohne ohne Probleme mit dem IN Parameter verarbeiten kann.

Natürlich ist hier nicht nur ein select-Statement denkbar. Mittels einem Cursor läßt sich mit dem Ergebnis auch eine weitere Stored Procedure ansprechen und die gefunden Daten z.B. in eine andere Tabelle abspeichern.

SET @ItemIDs = ’1,2,3,4,5,6,7′
SET @MitarbeiterID = ’23′

DECLARE Item_cursor CURSOR FOR
        SELECT   @MitarbeiterID AS MitarbeiterID, [id] AS @ItemID FROM fn_Split_varcharToint(@ItemIDs)

OPEN Item_cursor

– Perform the first fetch.
FETCH NEXT FROM Item_cursor
INTO @MitarbeiterID, @ItemIDs

– Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
   IF(@MitarbeiterID != 0 AND @ItemIDs != 0)
        BEGIN
                EXEC My_Custom_Stored_Procedure @MitarbeiterID, @ItemIDs
        END
   FETCH NEXT FROM Item_cursor
        INTO  @MitarbeiterID, @ItemIDs
END

CLOSE Item_cursor
DEALLOCATE Item_cursor

Zugegeben, ein Cursor ist nicht gerade etwas, was man häufig verwenden sollte, aber dieses Blog ist ja auch kein SQL Lehrbuch *G*

Volltextsuche für MySQL

Eine Volltextsuche war unter MySQL bislang nur mit MyISAM-Tabellen möglich, wobei dieser Tabellentyp allerdings keine Transaktionen oder Fremdschlüsselbeziehungen kennt. Das kostenlose PlugIn Sphinx schaft nun abhilfe und erlaubt sämtliche von MySQL angebotene Tabellentypen, wie z.B. InnoDB, zu durchsuchen.

Das unter der GPL veröffentlichte Plugin nutzt dabei einen eigenen Prozess zum Durchsuchen der MySQL-Tabellen und bietet zudem Such-Features wie “match all”, “match any” oder “phrase”. Laut den Entwicklern sollen sich bis zu 100 Gb an Texten relativ performant durchsuchen lassen (auf einer einzelnen CPU) und die Geschindigkeit einer Anfrage soll bei unter 0.1 Sek/4 GB Text liegen. Über eine generische XML Schnittstelle soll zudem die Integration und Anpassung vereinfach werden.

Ab MySQL 5.0.22 läßt sich Sphinx übrigends auch als eigener Tabellentyp in die Datenbank-Engine impelementieren, wobei die Suche dann durch einen externen Daemon durchgeführt wird.

[via mysqlperformanceblog.com]