Tja, ich bin gerade beim tweaken und logge seit einigen Stunden sämtliche Queries inklusive deren Dauer. In dieser Zeit hatte ich etwa 30-50 Queries pro Sekunde. Das Spiel läuft auf einem root mit 1GB Ram (ca 50% ungenutzt) und "AuthenticAMD, Dual-Core AMD Opteron(tm) Processor 1210 HE".
Aus meinen Logs stechen vor allem 2 Queries immerwieder heraus. Die benötigen oft mehrere Hundertstelsekunden und teilweise länger als eine Sekunde!
#1 (der schlimmere)
SQL:
SELECT
tq, def, block, mindam, maxdam
FROM
items_main I
INNER JOIN
user_items U
ON
I.typ = U.typ
AND
I.typ2 = U.typ2
WHERE
userID = %d
AND
equip NOT IN ('none','kampf','temp','bank','auktion')
#2
SQL:
SELECT
statID, value, `expire`, I.itemID
FROM
items_stats I
INNER JOIN
user_items UI
ON
UI.itemID = I.itemID
WHERE
I.itemID = UI.itemID
AND
UI.userID = %d
AND
UI.equip NOT IN ("none","kampf","temp","bank","auktion")
AND
(
expire = 0
OR
expire > %d
)
Hier noch die entsprechenden Tabellenstrukturen
SQL:
-- phpMyAdmin SQL Dump
-- version 2.11.5.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Erstellungszeit: 15. August 2008 um 15:20
-- Server Version: 5.0.18
-- PHP-Version: 5.1.2
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Datenbank: `chaos_returns`
--
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `items_main`
--
CREATE TABLE IF NOT EXISTS `items_main` (
`name` varchar(30) collate utf8_unicode_ci NOT NULL,
`typ` tinyint(1) unsigned NOT NULL default '0',
`typ2` tinyint(1) unsigned NOT NULL default '0',
`preis` int(3) unsigned default '0',
`def` int(2) unsigned default '0',
`block` tinyint(1) unsigned default '0',
`mindam` int(2) unsigned default '0',
`maxdam` int(2) unsigned default '0',
`tq` int(1) unsigned default '0',
`req_str` tinyint(1) unsigned default '0',
`req_dex` tinyint(1) unsigned default '0',
`req_int` tinyint(1) unsigned default '0',
`pfad` varchar(40) collate utf8_unicode_ci NOT NULL,
`width` enum('1','2') collate utf8_unicode_ci NOT NULL default '1',
`height` enum('1','2','3','4') collate utf8_unicode_ci NOT NULL default '1',
`maxStack` tinyint(1) unsigned NOT NULL default '20',
`maxSockets` tinyint(1) unsigned NOT NULL default '0',
`dropclass` varchar(10) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`name`),
KEY `typ` (`typ`),
KEY `typ2` (`typ2`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `items_stats`
--
CREATE TABLE IF NOT EXISTS `items_stats` (
`itemID` int(3) unsigned NOT NULL default '0',
`statID` int(2) unsigned NOT NULL default '0',
`value` float default '0',
`expire` int(4) unsigned NOT NULL default '0',
KEY `itemID` (`itemID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `user_items`
--
CREATE TABLE IF NOT EXISTS `user_items` (
`itemID` int(3) unsigned NOT NULL auto_increment,
`userID` int(3) unsigned NOT NULL default '0',
`name` varchar(51) collate utf8_unicode_ci NOT NULL default '%ARGERROR%',
`typ` tinyint(1) unsigned NOT NULL default '0' COMMENT 'BasisTyp',
`typ2` tinyint(1) unsigned NOT NULL default '0' COMMENT 'SubTyp',
`status` enum('normal','socket','magic','rare','speziell','profession') character set utf8 NOT NULL default 'normal',
`sockets` tinyint(1) unsigned NOT NULL default '0',
`socketTypes` varchar(50) collate utf8_unicode_ci NOT NULL,
`anzahl` int(2) unsigned default '1',
`preis` int(2) unsigned NOT NULL default '1',
`equip` enum('none','head','amu1','amu2','hand1','hand2','armor','ring1','ring2','ring3','boots','belt','gloves','soul','kampf','temp','bank','auktion') character set utf8 NOT NULL default 'none',
`fachID` int(3) unsigned NOT NULL COMMENT 'Bank',
`bagSlot` int(1) unsigned NOT NULL COMMENT 'invSlot für Bank und Inventar',
`req_lvl` tinyint(1) unsigned NOT NULL default '1',
`req_klasse` enum('magier','gladiator','waldläufer') character set utf8 default NULL,
PRIMARY KEY (`itemID`),
KEY `fachID` (`fachID`),
KEY `typ` (`typ`),
KEY `typ2` (`typ2`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=23601 ;
In keiner der Tabellen sind mehr als ein paar tausend Einträge. Kann mir jemand verraten, wieso #1 auf Ausführzeiten von teilweise über einer Sekunde kommt?