ShopNix

Tagebuch eines Shops auf Basis von osCommerce

Archive for März 2009

xt:Commerce – MySQL 5.0 – Performance

leave a comment »


Die Performance von xt:Commerce ist generell schlechter als die von osCommerce. Das ist zum einen zwangsläufig so, weil mehr Features eben auch mehr Aufwand bedeuten. Ein Teil der Probleme liegt allerdings auch in der kleinen Installationsbasis, die zwangsläufig zu geringerem Feedback führt.

Einen Teil der Probleme kann man durch Tuning der Datenbank reduzieren. Sehr hilfreich ist dazu das Script tuning-primer.sh das z.B. mit wget http://www.day32.com/MySQL/tuning-primer.sh erhältlich ist. Unter Debian ist das Paket bc Voraussetzung für das Script.

Entsprechend der Empfehlungen des Scripts habe ich die Parameter table_cache, read_buffer und join_buffer_size angehoben.

Anschließend habe ich eine Meldung im Supportforum abgesetzt und erhielt postwendend Antwort:

ALTER TABLE `shipping_status` ADD INDEX ( `language_id` );
ALTER TABLE `products` ADD INDEX ( `products_startpage` );
ALTER TABLE `products_to_categories` ADD INDEX ( `categories_id` );
ALTER TABLE `orders_products` ADD INDEX ( `orders_id` , `products_id` );
ALTER TABLE `zones_to_geo_zones` ADD INDEX ( `geo_zone_id` );
ALTER TABLE `tax_rates` ADD INDEX ( `tax_zone_id` );
ALTER TABLE `products` ADD INDEX ( `manufacturers_id` );

Damit reduziert sich das Problem (zumindest auf den ersten Blick) ganz erheblich.

Auf Grund meiner Auswertungen werde ich wohl noch einige Schlüssel hinzufügen. Dabei ist zu beachten, daß diese Indizes natürlich auch von der installierten Version und eventuellen Zusatzmodulen abhängen.

alter table whos_online add index (session_id);
alter table whos_online add index (time_last_click);
alter table specials add index (expires_date);
alter table products add index (session_id);
alter table personal_offers_by_customers_status_1 add index (products_id);
alter table products_description add index (language_id);
alter table customers add index (customers_status);
alter table products add index (products_ordered);
alter table specials add index (products_id);
alter table orders add index (orders_status);
alter table customers add index (customers_email_address);
alter table search_keywords add index (search_text);
alter table products_xsell add index (products_id);
alter table products_xsell add index (products_xsell_grp_name_id, products_id);
alter table content_manager add index (language_id, content_group);

Um Notwendigkeit und Wirkung eines Schlüssels zu testen, betrachte ich zunächst die Queries, die in mysql-slow.log protokolliert werden und kopiere sie mit dem vorangestellten Schlüsselwort „explain“ in den MySQL-Client zur Ausführung. Dann lege ich den oder die Schlüssel an, von denen ich mir eine Performancesteigerung erwarte. Anschließend lasse ich mir wieder mit explain die Auswirkungen anzeigen. Wenn ein Schlüssel keinen Vorteil bringt, lösche ich ihn sofort wieder, denn auch ein Index zuviel ist nicht gut für die Gesamtleistung des Systems.

Advertisements

Written by spessart

30. März 2009 at 16:15

Veröffentlicht in osCommerce, Performance, xtCommerce

Tagged with , ,

Admin: Programm ins Menu einbinden

leave a comment »


Die Menus liegen, nach Gruppen getrennt, im Verzeichnis admin/includes/boxes. Die sprachabhängigen Konstanten dazu sind z.B. in languages/german.php definiert. Eingehängt werden die Menüs in includes/column_left.php

Das Programm selbst liegt in admin/DATEI.php, die Sprachkonstanten in languages/german/DATEI.php.

Written by spessart

27. März 2009 at 17:52

Veröffentlicht in Allgemein

Zeichensatz, von ISO-8859-x zu UTF-8

leave a comment »


Es gibt eine Reihe guter Gründe, auf den Internationalen Zeichensatz UTF-8 umzustellen.

  • Alle Sprachen können im gleichen Zeichensatz behandelt werden
  • Betriebssysteme stellen um
  • XHTML nennt UTF-8 als Standard
  • Browser schalten automatisch auf UTF-8 wenn nicht explizit anderes gefordert wird

Im osCommerce Shop stellt man den Zeichensatz in der ersten sprachabhängigen Datei pro Sprache ein, z.B. in includes/languages/german.php, jeweils ein Mal pro Sprache, für Shop und Admin getrennt.

Standardmäßig wird Deutsch in ISO-8859-1 ausgeliefert, dem Zeichensatz für Westeuropa. Der Wert ist als Konstante definiert [define(‚CHARSET‘, ‚iso-8859-1‘);] und taucht im Quelltext der ausgelieferten HTML-Seite als Meta-Tag wieder auf.

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Will ich nun umstellen, genügt es natürlich nicht, nur diese Einstellung zu ändern, denn die soll nur den Browser darüber informieren, wie die Seite zu interpretieren ist. Ich muss außerdem die sprachabhängigen Dateien umkodieren. Unter Linux geht das sehr schön mit dem Tool „recode“.

recode ISO-8859-1..UTF-8 german.php

Der gegebene Anlaß für diese Aktion ist die Anforderung, einen polnischen Shop aufzubauen. Die passende Sprach-Contribution steht im Zeichensatz für Mitteleuropa, ISO-8859-2 zur Verfügung, und ich codiere sie schon vor der Inbetriebnahme um.

Für die Datenübernahme bekomme ich eine Exceltabelle, die ich mit OpenOffice öffne und als ASCII-Datei gleich in UTF-8 abspeichere.

Written by spessart

26. März 2009 at 23:49

Veröffentlicht in osCommerce, Sprachen

Tagged with , , , ,