Der 500ste Artikel auf phphatesme.com

Seit einigen Monaten bin ich regelmäßiger Leser der Webseite phphatesme.com, einem Blog, das sich weniger mit Howtos oder Tutorials beschäftigt, sondern mehr mit dem Software-Engineering Aspekt in der PHP-Welt. Die Artikel sind immer sehr freundlich geschrieben und in der Regel so provokant formuliert, dass man sich gerne in den Kommentaren beteiligt. Dieses Blog lebt bei den meisten Artikeln von den sehr guten und unüblich langen Kommentaren.

Gerade wurde der 500ste Artikel veröffentlicht, was der Betreiber zum Anlass genommen hat, ein Gewinnspiel mit tollen Preisen zu starten. Wer daran interessiert ist, der kann die Details im zugehörigen Blogartikel nachlesen.

Glückwunsch zum 500sten Artikel und macht weiter so!

Weiterführende Links zum Thema

A possible fix for a bottleneck in piwik used on high traffic sites

The last weeks I have been confronted with a big performance problem on a mid- to high-traffic website using Piwik to track the user behaviour. The MySQL server permanently had a load of over 90 and the mysqld process consumed permanently 99% CPU time.

The system runs as a single virtual VMware machine on quite good hardware. Only the Apache webserver with PHP 5.2 and MySQL 5.0 are running on this machine.

Most of you may now say something like: “Ok, you are wondering why your MySQL server runs out of performance on a virtual machine? Get a new job…” But there are some reasons for that. And no, the solution was not moving the system from the virtual machine to a physical one.

Looking at the output of mytop showed me that mostly one kind of queries ran very slowly. The first thing I did was tweeking the configuration files of the MySQL server an the Apache webserver. After that, “show status” looked much better but mysqld still comsumed 99% CPU time and the load was still over 90.

Even google couldn’t give me any solutions or hints. The only thing that I found out was, that many other people have the same problem with much better hardware. So it seemed that the performance problem comes from the Piwik application.

Knowing that tuning the application instead of tuning the server’s configuration files in the backend shows up the best results in most cases I took a closer look at the database structure (exploring the PHP code of piwik didn’t make sense to me).

As I mentioned before mytop showed me that the slow queries came all from the same source:

SELECT idaction FROM piwik_log_action WHERE name = 'my/site/has/a/long/uri/?s=af3729febc827382424' AND type = 3

The Piwik javascript block has been added to a site with a long URI where the unique part of the URI (the user session ID) started after character 15 of the URI string. Most entries in piwik_log_action.name look like the following:

‘my/site/has/a/long/uri/?s=af3729febc827382424′
‘my/site/has/a/long/uri/?s=0ca629febb623893883′
‘my/site/has/a/long/uri/?s=9ceff388edb34093490′
‘my/site/has/a/long/uri/?s=5bbefef672beaa82839′
‘my/site/has/a/long/uri/?s=55392fea00bccde0392′

The index on the coresponding table field was set to 15. Adding a new index with a size of 50 and dropping the old one solved the problem. The server now idles with a load of 0.25 and the mysqld process now comsumes about 8% of the CPU time instead of 99%.

Here is the solution:

The original create table statement looks like this:

CREATE TABLE `piwik_log_action` (
  `idaction` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `type` tinyint(3) unsigned default NULL,
  PRIMARY KEY  (`idaction`),
  KEY `index_type_name` (`type`,`name`(15))
) ENGINE=MyISAM DEFAULT CHARSET=utf8

To add the new index you just type the following command in the MySQL shell:

CREATE INDEX index_type_name2 ON piwik_log_action (type, name(50));

The new table structure should then look like:

CREATE TABLE `piwik_log_action` (
  `idaction` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `type` tinyint(3) unsigned default NULL,
  PRIMARY KEY  (`idaction`),
  KEY `index_type_name` (`type`,`name`(15)),
  KEY `index_type_name2` (`type`,`name`(50))
) ENGINE=MyISAM DEFAULT CHARSET=utf8

To remove the old index just type the following in your MySQL shell:

DROP INDEX index_type_name ON piwik_log_action;

The final table structure should then look like:

CREATE TABLE `piwik_log_action` (
  `idaction` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `type` tinyint(3) unsigned default NULL,
  PRIMARY KEY  (`idaction`),
  KEY `index_type_name2` (`type`,`name`(50))
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Piwik can so be used for mid- and high-traffic sites on a virtual machine without any problem. But be aware: adding a new index on a table with many entries takes some time. While the index is set up by MySQL the table will be locked! So don’t do that while your site has much traffic.

Kudos to Manuel Kiessling from MyHammer AG for providing the crucial hint!

redbrick (12.11.2009 23:00:51)

@Anthon: Thanks for your feedback. I know that this problem will be solved in the upcoming version. But many people have this problem and I could not find any (short term) solutions. And I think this “hack” is OK as long as the new version is not released. I hope the changes will not raise problems during the upgrade process.

I am glad to read that problem is already fixed in the SVN and I am looking forward to the upcoming release!

Anthon Pang (12.11.2009 19:02:19)

This is a known problem (see forum or trac).

It’s already fixed in svn, Watch for the upcoming 0,5 release.

Manuel Kiessling (12.11.2009 14:55:12)

Offenbar haben sie es schon auf der Uhr:

http://dev.piwik.org/trac/ticket/708

Eine kurze Apple-Support-Story

Vergangenen Samstag habe ich mir spontan im Media Markt eine MobileMe Lizenz zugelegt. Die Erstellung des MobileMe-Accounts war unkompliziert und ging sehr leicht von der Hand. Gerade als ich mit der Einrichtung fertig war und die Synchronisation auf meinem iPhone und MacBook Pro einrichten wollte, kam es aber zu Problemen. Weder iPhone noch Laptop wollten sich am MobileMe-Dienst anmelden. Dann fiel mir auf, dass ich mich beim Eintippen des Accountnamens vertippt hatte – und zwar bei der Registrierung. Also habe ich die Supportdokumente bei Apple mal durchsucht, ob es eine Möglichkeit gibt, den Accountnamen zu ändern (die Hoffnung stirbt ja zuletzt). Wie befürchtet, kann man den Login nicht so einfach ändern – was ja auch durchaus nachvollziehbar ist.

Wenn man eine kostenlose Probemitgliedschaft hat, dann kann man einfach seine Daten sichern, den alten Account löschen und einen neuen Account anlegen. Ähnlich funktioniert es auch, wenn man eine Kreditkarte hat und darüber bezahlt hat. Dann hat man sogar zwei Möglichkeiten. Zum einen kann man einen zweiten vollwertigen Account anlegen, den man dann erstmal bezahlen muss und hofft darauf, dass der Apple-Support nach der Löschung des alten Accounts das Geld gutschreibt, oder man legt ebenfalls einen Probeaccount an und lässt den alten Accounts löschen und den neuen durch den Support aufwerten.

Aber wenn man einen Code zur Aktivierung der Vollmitgliedschaft verwendet hat und keine Kreditkarte besitzt, dann ist das ein wenig problematischer, da man keinen neuen Account anlegen kann, ohne seine Kreditkartendaten zu hinterlassen. Ich habe dann einfach mal den Web-Supportchat gestartet und dem Supporter mein Problem erklärt. Ganz anders als erwartet, oder besser gesagt, ganz anders als ich es von Supportern gewohnt war, hat der Mensch am anderen Ende der Leitung wirklich versucht mir zu helfen, ohne mir irgendwelche Textbausteine an den Kopf zu geworfen. Nach einigen simplen Anweisung und der Beantwortung einiger Sicherheitsfragen um meine Identität zu bestätigen, hat der Supportmitarbeiter den von mir zuvor verwendeten Aktivierungscode reaktiviert. Somit konnte ich mit dem bei Media Markt gekauften Key einen neuen Account mit dem richtigen Loginnamen anlegen.

Sind die Piraten die Antwort auf meine Frage?

Vor einiger Zeit – um genau zu sein am 08.01.2008 – habe ich noch einen Blogeintrag in der Kategorie “Fragen” mit dem Titel “Warum gibt es nicht die eine Partei?” verfasst. Zu dem Zeitpunkt habe ich noch nichts von den Piraten gehört. Jetzt stelle ich mir die Frage: “Sind die Piraten die Antwort?”

Natürlich sind sie nicht die Lösung all unserer Probleme. Aber dennoch dürften sie das ein oder andere Problem zügig lindern oder sogar tatsächlich beheben können. Wie ich in meinem erwähnten Blogeintrag schon schrieb, lauten hier die Stichwörter Logik, Vernunft und gesunder Menschenverstand. Im Gegensatz zu den etablierten Parteien haben die Piraten einfach den besseren Ansatz:

  1. Alle zu Grunde liegenden Daten und Fakten sammeln.
  2. Die Daten gewichten und auswerten.
  3. Lösungsvorschläge/-ansätze erarbeiten.
  4. Die Lösungsvorschläge mit allen interessierten über das “neue Medium” diskutieren.
  5. Die beste Lösung angehen.

Jetzt werden einige Anhänger der etablierten Parteien sofort losschreien: “Was? Genau so macht meine Partei das doch auch!” Menschen, die das glauben, denen kann man leider auch mit den stichhaltigsten Beweisen nicht klar machen, dass dem nicht so ist. Es mag ja sein, dass sie es so propagieren, jedoch werde zum einen viel zu viele Fakten wegen der eigenen Überzeugung gefiltert und zum anderen fehlt ihnen einfach das Wissen und Verständnis. Sie holen sich sogenannte Experten und lassen sich von ihnen alles verkaufen. Es wird nicht hinterfragt. Wenn das, was der “Experte” erzählt in die Überzeugung passt, dann wird das so übernommen und für richtig oder notwendig erklärt. Die Piraten stammen zum größten Teil aus der IT oder anderen Branchen, wo ausschließlich Fakten und Logik die Basis aller Entscheidungen sind. Sie haben von der Pike auf gelernt, alles zu hinterfragen, ein Verständnis für das zu bekommen, was als gegeben hingestellt wird. Dieses Prinzip, gepaart mit gesundem Menschenverstand dürfte doch wohl auch für die Politik funktionieren. Eigentlich kann es doch gar nicht anders funktionieren!

Auch wenn ich Software Engineer bin und man meinen könnte, dass mir diese Verfahrensweisen und Prinzipien im Studium eingehämmert wurden: ich habe schon immer so gedacht und versucht auch danach zu handeln. Es war mir schon immer zu wider, dass es in der Politik nach ganz anderen Grundsätzen vorgegangen wird. Deswegen habe ich meine Entscheidung getroffen und werde die Piraten wählen. Da in meinem Wahlkreis kein Pirat als Direktkandidaten antritt, werde ich wie üblich das geringste Übel wählen.

In letzter Zeit kam in meinem näheren Umfeld immer wieder die Frage auf, wen man denn wählen würde. Auch von Freunden, die sehr internetaffin sind, habe ich immer wieder Schlagworte wie “Spaßpartei” oder “unwählbar” in Bezug auf die Piraten gehört. Ich kann ihre Ansicht verstehen – aber eben nur teilweise. Sie sagen, die Piraten haben kein echtes Wahlprogramm und haben nur zu IT-spezifischen Themen eine Stellung. Aber so kann man das nicht sagen. In der IT liegen ihre Wurzeln und dort kennen sie sich aus. Die Piraten sind eine noch sehr junge Partei, die nicht von Anfang an für alle Themen eine Lösung haben. Das geht auch nicht, da ihnen die grundlegenden Fakten fehlen. Aber sie werden sich früher oder später mit den anderen Themen auseinandersetzen. Wenn mir dann jemand sagt, dass er die Piraten nicht wählen kann, weil er Angst hat, dass die Piraten dann eine konträre Einstellung zu den bisher unbearbeiteten Themen einnehmen könnten, dann kann ist das für mich verständlich. Ich für meinen Teil vertraue der Herangehensweise und den Prinzipien quasi blind und bin mir sicher, dass die Piraten auch in den anderen Themen die richtige Einstellung vertreten werden, wenn es soweit ist. Aber im Moment gibt es für sie einfach wichtigere, existenziellere Themen, die zudem sehr tief in die andere Themen hineinreichen, die bearbeitet werden müssen. Außerdem wird die Piratenpartei niemals übermäßig viele Stimmen bekommen. Die großen Parteien werden die großen Parteien bleiben. Und die werden sich auch weiterhin ihre Politik machen.

Weiterführende Links zum Thema

[Serie] Nerd Herd

Als ich gestern ein wenig durch den iTunes-Store gestöbert habe, bin ich auf eine interessante neue Serie gestoßen: Chuck. Die Beschreibung klang sehr interessant. Da musste ich die 2,49 € investieren und mir den Piloten abends anschauen.

Natürlich konnte die Serie nicht halten, was sich ein Nerd erhofft hätte. Aber dennoch scheint die Serie gut zu werden. Der Fokus liegt eindeutig nicht auf realistische Darstellung der technischen Gegebenheiten sondern auf Comedy. Aber um so lustiger ist die Serie für Nerds.

Ein kleines Beispiel:
Chuck kommt mit seinem besten Kumpel nach Hause. Beide bleiben wie erstarrt stehen und blicken auf eine in schwarz eingehüllte Person, die einem Ninja gleicht. Diese Person hält gerade den Computer von Chuck (es ist unschwer zu erkennen, das es sich dabei um einen Mac Pro handelt) und ist offenbar im Begriff diesen zu stehlen. Nach einer kurzen Rangelei und vergeblichen Versuchen den Dieb zur Strecke zu bringen bzw. zu überreden, doch bitte nicht den Computer mit zu nehmen (alles andere ist in Ordnung, nur nicht der Computer), fällt der Rechner aus circe 1,5 m Höhe von einem Regal zu boden. Man sieht 2 Festplatten herausfallen. Wie sich kurze Zeit später herausstellt, war die maskierte Person eine CIA-Agentin. In einem Telefongespräch mit ihrem Vorgesetzten sagt sie, dass der Computer hoffnungslos zerstört sei und die Daten nicht mehr zu retten sind. Und auch Chuck, ein Vorzeige-Nerd, der in einem riesigen Store an einem Technikreperaturstand der Firma “Nerd Herd” arbeitet, ist nicht in der Lage, irgend etwas an dem Gerät zu reparieren. Unrealistisch, aber witzig.

Grob zusammengefasst kann man die Serie (oder zumindest den Piloten) folgendermaßen beschreiben: eine Kombination aus dem Film “Vernetzt – Johnny Mnemonic” mit Keanu Reeves und der Serie “Reaper – Ein teuflischer Job”.

Ich kann nur jedem Technikbegeisterten empfehlen, sich zumindest die Pilotfolge im iTunes-Store zu kaufen und anzusehen. Und wenn die Serie gefällt, kann sollte man sich auch die zweite Folge noch kaufen und dann ab Samstag um 17:00 Uhr auf Pro7 die Serie weiterschauen. Bisher gibt es nur den Piloten und eine weitere Folge in deutscher Sprache, die beide eine Länge von ca. 40 Minuten haben.

[Mac OS X] Twit Menulet, a Twitter client that fits in your mac menu bar

I just found a very nice alternative to the Mac OS X twitter client Nambu: Twit Menulet, a Twitter client that fits in your mac menu bar. Like Nambu, Twit Menulet has a little icon in the Mac OS X menu bar. But Twit Menulet does not have an application window. All actions are done over the Twit Menulet menu in the menu bar. Give it a try – I’ll do!