Abgleichen von Tabelleninhalten unter mySQL (Analog MERGE INTO)

19. Oktober 2011 by Alonso

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;

Diesen Beitrag weiterlesen »

Templates in Citrix Xenserver (5.6) löschen.

20. September 2011 by Alonso

Das entfernen von vordefinierten Templates innerhalb eine Citrix Xenserver Installation ist nicht ganz selbsterklärend und zugegebenerweise etwas mühsam. Zur Vereinfachung habe ich ein simples Bash-Script gebaut:

Anwendung:

./xe-remove-template.sh "template-name"

Diesen Beitrag weiterlesen »

mySQL Server 5.5 auf Debian Squeeze

11. August 2011 by Alonso

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

Diesen Beitrag weiterlesen »

Howto: SNMP(D) unter Debian Squeeze

23. März 2011 by Alonso

Dieses Howto soll ein kleiner Quickstart in den “neuen” SNMPD-Deamon unter Debian Squeeze sein. In diesem Fall soll der Dienst so konfiguriert werden, dass Systeminformationen über SNMP (z.B. Nagios,Cacti) abgefragt werden können.

Installation der Pakete:

apt-get install snmp

Wer auch zukünftig seine OID’s auflösen möchte, muss sich nun neu im Non-Free Repository bedienen. Dort steht das entsprechende Paket “snmp-mibs-downloader” bereit.

apt-get install snmp-mibs-downloader

Das wars, der SNMPD-Deamon müsste mal “laufen”. Test mittels dem entsprechenden init.d Script möglich

/etc/init.d/snmpd status

Dort müsste man den Erfolg der bisher äussert komplexen Installation nun mittels “snmpd is running” bestätigt kriegen.

Weiter gehts mit der Konfiguration:
Diesen Beitrag weiterlesen »

Courier SSL Zertifikate erneuern (Debian)

18. März 2011 by Alonso

Wenn der Courier IMAP und/oder POP3 Server unter Debian als Paket installiert wird, erstellt selbiges automatisch die selbstsignierten SSL-Zertifikate. Diese haben per default eine Laufzeit von 1 Jahr und müssen entsprechend erneuert werden. Unter Debian gibts dazu direkt passende Werkzeuge..

Alte Zertifikate sichern:

cd /etc/courier/
mv imapd.pem imapd.pem.old
mv pop3d.pem pop3d.pem.old

Diesen Beitrag weiterlesen »

mySQL Information Schema: Tables

11. November 2010 by Alonso

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%';

Diesen Beitrag weiterlesen »

Don’t: Produktive Datenbankabfragen mit Select * from …

5. November 2010 by Alonso

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!

Diesen Beitrag weiterlesen »

SQL Querys so kompakt wie möglich halten

15. Oktober 2010 by Alonso

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..

Diesen Beitrag weiterlesen »

mySQL Tuning Primer

15. Oktober 2010 by Alonso

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).
Diesen Beitrag weiterlesen »

Ideales mySQL Server Setup

15. Oktober 2010 by Alonso

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.

Diesen Beitrag weiterlesen »


Social Widgets powered by AB-WebLog.com.