mysql und qcache

MySQL, PostgreSQL, SQLite
bertengel
Posts: 33
Joined: 2006-03-21 22:40

mysql und qcache

Post by bertengel » 2006-03-21 22:48

Hallo Group,

ich habe ein Problem mit einer mysql tabelle .... und zwar habe ich einen qcache (on demand) eingerichtet.

query_cache_limit = 1048576
query_cache_min_res_unit = 4096
query_cache_size = 65536000
query_cache_type = 2

Dieser funktioniert auch ...ich gebe bei einem SELECT der tabelle "PHPAUCTIONXL_categories" die option SQL_CACHE mit ...
Diese Selects sind dann alle im cache (ca. 32000)

dann kommt aber eine cron.php die per crontab alle 20 min mir den kompletten cache leert ...in dieser cron.php konnte ich den überläter ausfindig machen :

foreach($categories as $cat_id=>$category) {
if($category['updated']) {
$query = "UPDATE PHPAUCTIONXL_categories SET
counter=$category[counter],
sub_counter=$category[sub_counter]
WHERE cat_id=$cat_id";
$res = mysql_query($query);
$category['updated']=false;
}
}

nach diesem script sind alle SELECT von der tabelle "PHPAUCTIONXL_categories" aus dem qcache gelöscht.

Ist das so wenn ich etwas in dieser tabelle per UPDATE oder INSERT schreibe das dann die SELECT aus dem qcache fallen?

Kann man da etwas machen das der cache sich nicht leert?
Denn der erste Aufruf dieses Selects dauert ca 3-4 min. ...denn es sind ca. 32000 select´s

Danke im vorraus

Mike

ephigenie
Posts: 68
Joined: 2006-01-12 17:01

Re: mysql und qcache

Post by ephigenie » 2006-03-21 23:36

Ich nehme mal an du benutzt eine myisam tabelle ?

Zitat vom mysql - manual ...
If a table changes, all cached queries that use the table become invalid and are removed from the cache. This includes queries that use MERGE tables that map to the changed table. A table can be changed by many types of statements, such as INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP TABLE, or DROP DATABASE.
Auch hier sollte vielleicht überlegt werden, ob es nicht sinnvoller ist, die Tabelle (32.000 queries erscheint mir ja noch überschaubar)
in eine vom typ MEMORY zu mergen.

dein Cronjob könnte dann den update machen, da du nicht mehr so an den Query - Cache gebunden bist... Zudem könnte dann der Cronjob für ein gelegentliches Backup sorgen sowas wie "insert into PHPAUCTIONXL_categories_real select * from PHPAUCTIONXL_categories_mem"

Alternativ mal Indexe etc überprüfen auf den Tabellen ?
Normalerweise sollte bei 32.000 Rows ein query nicht 4min dauern...

bertengel
Posts: 33
Joined: 2006-03-21 22:40

Re: mysql und qcache

Post by bertengel » 2006-03-21 23:48

Danke für die Info ...

wenn ich die Tabelle zu MEMORY ändere :
ALTER TABLE `PHPAUCTIONXL_categories` TYPE = memory

dann ist folgender fehler :
#1163 - The used table type doesn't support BLOB/TEXT columns

oder meinst du das anders mit 'MEMORY zu mergen'?

ephigenie
Posts: 68
Joined: 2006-01-12 17:01

Re: mysql und qcache

Post by ephigenie » 2006-03-22 00:33

hm ok - das meinte ich eigentlich ...

Wie sieht das SQL-Layout aus von der Tabelle ?
Ist das die Opensource Version von PHPAUCTION ? oder die verschlüsselte ?

bertengel
Posts: 33
Joined: 2006-03-21 22:40

Re: mysql und qcache

Post by bertengel » 2006-03-22 07:38

erstmal danke für deine hilfe ...

das layout sieht so aus:

cat_id int(4) Nein auto_increment
parent_id int(4) Ja NULL
cat_name tinytext latin1_german2_ci Ja NULL
deleted int(1) Ja NULL
sub_counter int(11) Ja NULL
counter int(11) Ja NULL
cat_colour tinytext latin1_german2_ci Nein
cat_image tinytext latin1_german2_ci Nein
feesfree enum('y', 'n') latin1_german2_ci Nein n

es ist die source code version (verschlusselt ist nur die settings.inc.php)

ich habe mal zum testen eine neue tabelle mit 2 felder vom typ memory angelegt ... ... diese tabelle ist dann aber vom typ HEAP obwohl ich MEMORY angegeben habe ... ein nachträglichen :
ALTER TABLE `PHPAUCTIONXL_mem_categories` TYPE = memory
gibt keinen fehler ...tabelle bleibt aber HEAP
was ist eigentlich der typ HEAP (ich suche auch gerade im manual)

danke im vorraus

mike

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: mysql und qcache

Post by isotopp » 2006-03-22 08:54

bertengel wrote:"UPDATE PHPAUCTIONXL_categories SET ..."
Der Query Cache speichert einen Hash des Strings der Query und die in der Query referenzierten Tabellen sowie den Result-Set ab.

Wenn eine Query des Weges kommt, die denselben Hash hat wie ein Eintrag im Query Cache, spielt MySQL die alte Query ab, ohne noch einmal rechnen zu müssen.

Wenn Data Modification Language des Weges kommt, dann werden alle Queries aus dem Query Cache entfernt, die diese Tabelle gelistet haben. Das ist auch notwendig, da die Result Sets der dieser Queries sich ja jetzt geändert haben können.
Kann man da etwas machen das der cache sich nicht leert?
Nein, denn die Antworten im Cache sind ja jetzt ungültig.

Deine Selects scheinen mir sehr wenig effektiv zu sein.

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: mysql und qcache

Post by isotopp » 2006-03-22 08:57

bertengel wrote:das layout sieht so aus:
Bitte verwende in Zukunft "SHOW CREATE TABLE <tabellenname>G", um solche Informationen abzurufen. "DESCRIBE <tabellenname>;" liefert nicht die notwendigen Daten.
Diese tabelle ist dann aber vom typ HEAP obwohl ich MEMORY angegeben habe ...
MEMORY ist HEAP.

Bitte aktiviere das Slow Query Log bei Deinem Server, oder liefere uns Dein SELECT Statement. Liefere uns auch die Ausgabe von "EXPLAIN SELECT ..." für dieses Statement. Beende das EXPLAIN-Kommando mit "G", damit lesbare Ausgabe erzeugt wird.

primus
Posts: 18
Joined: 2003-01-21 15:11

Re: mysql und qcache

Post by primus » 2006-03-22 09:06

in wievielen foren möchtest du eigentlich noch fragen? :)