Archiv für die Kategorie „mySQL“

Abgleichen von Tabelleninhalten unter mySQL (Analog MERGE INTO)

Mittwoch, 19. Oktober 2011

Für den performanten und sicheren Datenabgleich („UPSERT“) stehen bei den grossen Datenbanksystemen die sogenannten Merge-Statements bereit (MERGE INTO …). Dies ist unter mySQL aktuell nicht möglich, kann jedoch sinngemäss mit INSERT .. ON DUPLICATE KEY gelöst werden.

Für dieses Beispiel brauchen wir 2 Tabellen, genaugenommen je eine Quell – und Zieltabelle.

CREATE TABLE src (
    src_id INT(11) NOT NULL AUTO_INCREMENT,
    src_value1 VARCHAR(255) NOT NULL,
    src_value2 VARCHAR(255) NOT NULL,
    src_ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (src_id),
    KEY idx_src_ts (src_ts)
) ENGINE=InnoDB;
 
CREATE TABLE tgt (
    tgt_id INT(11) NOT NULL,
    tgt_value1 VARCHAR(255) NOT NULL,
    tgt_value2 VARCHAR(255) NOT NULL,
    tgt_ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (tgt_id),
    KEY idx_tgt_ts (tgt_ts)
) ENGINE=InnoDB;

(mehr …)

mySQL Server 5.5 auf Debian Squeeze

Donnerstag, 11. August 2011

Wer einen performanten mySQL Server 5.5 unter Debian Squeeze betreiben will – muss auf das normale Debian Packet verzichten und manuell installieren, da die „offizielle“ Variante aus dem Repositry leider etwas stark veraltet ist.

Ist aber grundsätzlich kein Hexenwerk – so gehts:

Sofern bestehende Datenbanken vorhanden sind – Backup erstellen! Ich gehe davon aus dass es hierzu kein HowTo braucht 😉

Alte Installation bereinigen, sofern vorhanden:

apt-get remove mysql-server mysql-common --purge && apt-get autoremove

(mehr …)

mySQL Information Schema: Tables

Donnerstag, 11. November 2010

Die Information Schemas unter mySQL liefern praktisch alle relevanten Informationen über die DB und deren Inhalt. Besonders praktisch für Anwender welche kein UI (z.B. phpmyadmin) zur Verfügung haben und mit der mySQL-Konsole arbeiten müssen (dürfen/können!).

Sehr informativ sind die Table Schemas.

Folgendes Query listet alle Tabellen, deren Storage Engine, Kollation und die Anzahl Datensätze zurück:

SELECT table_schema, table_name, engine, table_collation, table_rows 
from information_schema.tables 
where table_schema like 'mydb%';

(mehr …)

Don’t: Produktive Datenbankabfragen mit Select * from …

Freitag, 5. November 2010

Mittels Cacti konnten wir einen beachtlichen Anstieg des mySQL Traffics auf einem Shared Hosting Server feststellen – welcher langsam aber sicher die Performance des Servers beeinträchtigte.

Ein einfaches

SHOW FULL PROCESSLIST;

auf der mySQL-Konsole dieses Servers brachte folgendes Query mit sehr kurzen Intervallen und einer grossen Laufzeit zum vorschein:

SELECT * FROM hits ORDER by userid DESC

Somit war auch die verdächtige Datenbank – und dadurch auch der verantwortliche Account erruiert. Ein kurzer Blick auf das Schema dieser Datenbank/Tabelle zeigte folgendes:

  • > 1’000’000 Datensätze!
  • Kein Index auf userid!

(mehr …)

SQL Querys so kompakt wie möglich halten

Freitag, 15. Oktober 2010

Setzten sie keine SELECT * FROM Statements ein wenn sie nicht zwingend ALLE informationen benötigen! Natürlich sollten auch unnötigen keine JOINS erstellt werden.

Praxisbeispiel:
Ein Kundenserver viel immer wieder durch schlechte Performance auf. Es handelte sich dabei um eine Forensoftware von Woltlab, welche mit ein paar Hacks erweitert wurde. Insgesammt umfasst die Datenbank an die 1.5 Millionen Posts in 300’000 Threads. Das Datenvolumen der Datenbank lag zu diesem Zeitpunkt bei rund 1.4GB. Zu Stosszeiten waren jeweils an die 250 User und Bots unterwegs..

(mehr …)

mySQL Tuning Primer

Freitag, 15. Oktober 2010

Der mySQL Tuning Primer ist ein kleines Shellscript welches die mySQL-Statusinformationen („SHOW STATUS“, „SHOW VARIABLES“) analysiert und in einen übersichtlichen Report mit Optimierungstips umwandelt. Ein gutes und effizientes Hilfsmittel zur Optimierung der Serverkonfiguration (my.cnf).
(mehr …)

Ideales mySQL Server Setup

Freitag, 15. Oktober 2010

Die Optimierung des „Serversetups“ wird in der Praxis gerne auf die Parameter in der zentralen Konfigurationsdatei my.cnf beschränkt. Folgende Punkte sollten allerdings (idealerweise) vorgängig beim Setup des Servers und beim zuweisen/mounten der Filesysteme beachtet werden, bedingt natürlich auch dass die Anforderungen und der Einsatzzweck der Datenbank bekannt sind.

(mehr …)

Vergleich der wichtigsten Storage Engines Memory, InnoDB und MyISAM

Freitag, 15. Oktober 2010

Die Wahl der Storage Engine hat einen beachtlichen Einfluss auf die Performance der Datenbank bzw. Applikation. Es lohnt es sich defenitiv die wichtigsten Typen Memory, InnoDB und MyISAM etwas genauer anzusehen.

Aktuell laufen noch immer ein grosser Anteil der Datenbanken unter MyISAM, was folgende Gründe haben kann:

  • MyISAM ist die default storage engine bei einer mySQL Installation unter Linux/Unix
  • MyISAM ist die älteste storage engine unter mySQL

Die Punkte zeigen auf – das die Storage Engine oftmals nicht bewusst bestimmt wurde. Da die storage engine pro Tabelle zugewiesen wird, kann die bestmöglichste Lösung also auch eine Kombination aus den verschiedenen Typen sein.
(mehr …)


Social Widgets powered by AB-WebLog.com.