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
mysql und qcache
Re: mysql und qcache
Ich nehme mal an du benutzt eine myisam tabelle ?
Zitat vom mysql - manual ...
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...
Zitat vom mysql - manual ...
Auch hier sollte vielleicht überlegt werden, ob es nicht sinnvoller ist, die Tabelle (32.000 queries erscheint mir ja noch überschaubar)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.
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...
Re: mysql und qcache
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'?
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'?
Re: mysql und qcache
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 ?
Wie sieht das SQL-Layout aus von der Tabelle ?
Ist das die Opensource Version von PHPAUCTION ? oder die verschlüsselte ?
Re: mysql und qcache
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
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
Re: mysql und qcache
Der Query Cache speichert einen Hash des Strings der Query und die in der Query referenzierten Tabellen sowie den Result-Set ab.bertengel wrote:"UPDATE PHPAUCTIONXL_categories SET ..."
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.
Nein, denn die Antworten im Cache sind ja jetzt ungültig.Kann man da etwas machen das der cache sich nicht leert?
Deine Selects scheinen mir sehr wenig effektiv zu sein.
Re: mysql und qcache
Bitte verwende in Zukunft "SHOW CREATE TABLE <tabellenname>G", um solche Informationen abzurufen. "DESCRIBE <tabellenname>;" liefert nicht die notwendigen Daten.bertengel wrote:das layout sieht so aus:
MEMORY ist HEAP.Diese tabelle ist dann aber vom typ HEAP obwohl ich MEMORY angegeben habe ...
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.
Re: mysql und qcache
in wievielen foren möchtest du eigentlich noch fragen? :)