Archiv für April 2008

17
Apr

MySQL Migration von MyISAM auf InnoDB

Heute stand bei der Arbeit eine Migration einer MySQL Datenbank von MyISAM auf InnoDB an. Das entsprechende Hybris-System läuft zwar dann etwas langsamer (MySQL spricht von etwa 20%), doch der Vorteil des Sperren einzelner Zeilen (Row level locking) bein InnoDB im Gegensatz zur ganzen Tabelle (Table level locking) bei MyISAM ist gerade bei einem e-Commerce System, wo ständig Produktdaten von diversen Distributoren automatisch synchronisiert werden, immens. Wo früher beim Abgleich von tausenden von Produkten fast das ganze System in die Knie ging, merkt man das nach der Migration die konkurierenden SELECT und INSERT/UPDATE Statements fliessender aneinander vorbeikommen.

Als erstes wird von der zu migrierenden Datenbank einen Dump gemacht. Das System sollte während der Migration nicht auf die Datenbank zugreifen, da sonst Daten verloren gehen würden. Grundsätzlich arbeite ich immer in einer Screen-Session, damit die Migration bei einem Abbruch der SSH Verbindung auf den Server auch weiterläuft und ich mich einfach wieder einklinken kann. Ein kleiner Trick für den schnelleren Import ist das Ausschalten des automatischen Schreibens der Transaktionen während des Importes. Somit wird nicht nach jedem einzelnen INSERT-Statement die Transaktion automatisch beendet und gleich wieder eine neue Transaktion gestartet.


m-kessler@xabbu:~$ screen -S MySQLUpdate
m-kessler@xabbu:~$ sudo echo "SET AUTOCOMMIT = 0;"  > database.sql
m-kessler@xabbu:~$ sudo mysqldump -u dbuser -p database >> database.sql
m-kessler@xabbu:~$ sudo echo "COMMIT;" >> database.sql

Wobei dbuser der Name des Datenbankbenutzers ist und database der Name der zu migrierenden Datenbank. Jetzt liegt der SQL Dumo auf der Platte und die Umstellung des Tabellentyps kann beginnen. Ich benutze einfach sed dafür:


m-kessler@xabbu:~$ sudo sed -i 's/MyISAM/InnoDB/g' database.sql

Da MySQL unterschiedliche Konfigurationen ermöglicht für die verschiedenen Tabellentypen, sollte man tunlichst die my.cnf von MySQL öffen und die InnoDB Einstellungen auskommentieren und gegebenenfalls anpassen. Danach muss die Datenbank neu gestartet werden:


m-kessler@xabbu:~$ sudo vim /etc/my.cnf
m-kessler@xabbu:~$ sudo /etc/init.d/mysql restart

In einem letzten Schritt können wir nun den Dump wieder einlesen:


m-kessler@xabbu:~$ sudo mysql -u dbuser -p database < database.sql

Finito!

10
Apr

Webseiten programmieren mit HTML/CSS/PHP

Der Zeitungsjunge hat soeben eine druckfrische Email von Kire aus dem Computerlabor in mein Postfach gelegt! Für alle angehenden Programmierer gibt es eine Einführung in HTML/CSS/PHP. Aber lest selber…

Hallöle

Nicht vergessen! Am Montag 21. April startet der Dreiteiler zum Thema
"Webseiten programmieren mit HTML/CSS/PHP".

Zuerst wird es eine kurze Einführung in die Funktionsweise des WWWs
geben. Anschliessend werden wir uns Stück um Stück die
Programmier-Techniken aneignen und dabei eine eigene Webseite erstellen,
welche auch gleich publiziert werden kann.

Das Thema ist betriebssystemunabhängig - und demnach auch für
FensteranwenderInnen und BenutzerInnen von angebissenem Obst spannend.
Dennoch wird auch Zeit für konkrete (Ubuntu-) Wünsche und Fragen übrig
bleiben. Los geht's um 20.00 Uhr in der KuZeB-Läsothek.

Der zweite und dritte Teil steht am 12.05. resp. 09.06.2008 auf dem
Programm. Und im Herbst steht dann eine Einführung in Ubuntu Studio an -
der Ubuntu-Version für Kreative, die viel in den Bereichen Audio, Video
und Grafik arbeiten.

Alles weitere steht wie immer hier geschrieben:
http://www.kire.ch/linux/computerlabor.htm

Grüssle & bis dänne
Kire

Auch wenn PHP nicht meine liebste Sprache ist, ist sie doch sehr wichtig, da gerade im Open Source bereich sehr viele Applikationen in PHP geschrieben sind. PHP an sich als Sprache finde ich schon ok, ich vermisse bei den meisten Anwendungen einfach eine anständige MVC-Architektur. Das erinnert mich gerade daran, dass es langsam an der Zeit wird das ich auch einmal etwas zum Computerlabor beitragen könnte, z.B. einen Ruby on Rails Workshop… Mal sehen.

Auf jeden Fall ein grosses “Hallöle” und Dankeschön an Kire!

06
Apr

Eclipse Profiler TPTP auf Ubuntu installieren

Um den TPTP Profiler in Eclipse zu Installieren, muss anders als gewöhnlich etwas mehr Aufwand betrieben werden. Als erstes wird das TPTP Plugin normal mit dem Update-Manager installiert und dabei einfach alle benötigen Eigenschaften selektieren. Bei mir waren das alle Plugins ausser BIRT.

Name TPTP Update site
URL http://eclipse.org/tptp/updates/site.xml


TPTP Agenten

Der Profiler benötigt einen nativen Agenten, welcher von http://www.eclipse.org/tptp/home/downloads/ heruntergeladen werden kann. Es muss einfach der Agenten für die entsprechende Plattform ausgewählt werden. Beim einem 32-Bit Ubuntu ist dies z.B. LINUX-IA32. Das Archiv kann für die Installation einfach an den gewünschten Platz entpackt werden, wie z.B. /opt/tptp_ac

Bibliotheken

Als nächstes müssen die Bibliotheken des TPTP Agenten ins System eingebunden werden:


m-kessler@xabbu:~$ su -
m-kessler@xabbu:~$ cd /etc/ld.so.conf.d/
m-kessler@xabbu:~$ echo "/opt/tptp_ac/lib" > tptp_ac.conf
m-kessler@xabbu:~$ echo "/opt/tptp_ac/plugins/org.eclipse.tptp.javaprofiler" >> tptp_ac.conf
m-kessler@xabbu:~$ ldconfig
m-kessler@xabbu:~$ exit

Der Agent benötigt des weiteren die Bibliothek libstdc+-libc6.2-2.so.3, welche sich auf Ubuntu im Paket libstdc+2.10-glibc2.2 befindet:


m-kessler@xabbu:~$ sudo apt-get install libstdc++2.10-glibc2.2

Umgebungsvariabeln

Die Umgebungsvariabeln werden global in /etc/environment definiert:


TPTP_AC_HOME="/opt/tptp_ac"
JAVA_PROFILER_HOME="/opt/tptp_ac/plugins/org.eclipse.tptp.javaprofiler"
TEMP="/tmp"

Die bereits bestehende Variable PATH muss um folgende Pfade erweitert werden:


/opt/tptp_ac/bin:/opt/tptp_ac/plugins/org.eclipse.tptp.javaprofiler:/opt/tptp_ac/lib

Konfiguration

Als nächstes muss nun noch die Konfigurationsdatei erstellt werden:


cd /opt/tptp_ac/bin
./SetConfig.sh

Die Daten welche von dem kleinen Konfigurationsprogramm abgefragt werden, landen schliesslich in der Datei /opt/tptp_ac/config/serviceconfig.xml

Auf einem Linux System muss noch der TimeController in der Datei /opt/tptp_ac/agents/org.eclipse.tptp.TimeCollector/agent.xml angepasst werden. Einfach die Zeile


<launchInfo><Application executable=".\TimeCollector.exe"></Application></launchInfo>

in


<launchInfo><Application executable="TimeCollector"></Application></launchInfo>

Scripte anpassen

Die Start und Stop Scripte vom TPTP Agenten enthalten leider noch einen Fehler. Um diese zu beheben müssen die Datei /opt/tptp_ac/bin/RAStart.sh und /opt/tptp_ac/bin/RAStop.sh angepasst werden, indem man den falschen Vergleichsoperatoren == durch = ersetzt. Der Programmierer hat dies wohl mit Java verwechselt. Richtig sehen diese in der Datei /opt/tptp_ac/bin/RAStart.sh, Zeile 44 wie folgt aus:


if [ x$TEMP = x ]; then

und in der anderen Datei /opt/tptp_ac/bin/RAStop.sh, Zeile 27


if [ x$TEMP = x ]; then

Agenten starten

Der Agent kann nur in der Kommandozeile gestartet werden:


m-kessler@xabbu:~$ RAStart.sh
Starting Agent Controller.
ACServer started successfully.

Test

Um den Agenten zu Testen, kann in der Kommandozeile ein Test gestartet werden:


m-kessler@xabbu:~$ SampleClient

Connected to the Agent Controller on "localhost" at port number 10006
The Time Collector Agent ID: 103
Established a data channel with the agent.
Sending 5 Hello messages over data channel to TimeCollector ...
Start the TimeCollector ...
Incoming data: Hello from Time Collector Agent - Count 0
Incoming data: Hello from Time Collector Agent - Count 1
Incoming data: Hello from Time Collector Agent - Count 2
Incoming data: Hello from Time Collector Agent - Count 3
Incoming data: Hello from Time Collector Agent - Count 4
Incoming data: Hello from Time Collector Agent - Count 5
Incoming data: Hello from Time Collector Agent - Count 6
Incoming data: Hello from Time Collector Agent - Count 7
Incoming data: Hello from Time Collector Agent - Count 8
Stop the TimeCollector ...
Incoming data: Hello from Time Collector Agent - Count 9
Incoming data: Hello from Time Collector Agent - Count 10
All finished
Press any key to exit...

Eclipse

Damit auch alle prima klappt, setzten wir noch den Java Bibliotheken Pfad, indem wir im Eclipse Installationsverzeichnis die Pfade zu den Bibliotheken in der Datei eclipse.ini anpassen:


-Djava.library.path=/usr/lib/jni:/opt/tptp_ac/plugins/org.eclipse.tptp.javaprofiler:
/opt/tptp_ac/lib

Nun können Java Programme einfach mit dem Profile Knopf gestartet werden.

Tomcat

Beim Tomcat ist mir nicht gelungen, den Profiler direkt zu starten. Als Workaround habe zusätzlich noch den Port 10006 als Profling Host konfiguriert:

Profiler Preferences

Dannach einfach den Tomcat mit der Option


-XrunpiAgent:server=enabled

gestartet, damit sich Tomcat mit dem Agenten verbinden. Somit kann nachträglich Eclipse mit dem Agenten verbunden werden und so das Profiling gestartet werden.




April 2008
M D M D F S S
« Mrz   Mai »
 123456
78910111213
14151617181920
21222324252627
282930  

Werbung


Buttonitis