mmofacts.com

Mysql vs. SQLI vs. InnoDB und einiges anderes....

gepostet vor 19 Jahre, 5 Monate von The_Alien
Also, ich habe da mal ein paar Fragen.

Zum einen geht es um die DB Art - momentan nutze ich mysql. Als verbesserte Version gibt es ja das mysqli - da wollte ich mal fragen ob da schon einer Erfahrungen mit hat, zumal diese Version ja auch Transaktionen unterstützt.

Als nächstes hatte ich mir InnoDB angeschaut, aber sehr unterschiedliche Meinungen darüber gehört.

Ich frage weil ich momentan ca. 800 Abfragen / Sekunde an die DB habe und das System so langsam aufgibt (oder ist das übermäßig viel?).

Dann noch eine Frage wegen dem connect, mein Problem ist das bei pconnect schnell der Ram voll ist - komischer weiße. Normales connect ist halt belastend weil ja bei jedem Seitenaufruf ein neuer connect statfindet.
Gibt es nicht eine Möglichkeit das PHP eine Dauerverbindung hat sodas ich in den scripten garnicht mehr connecten muß?

Weil momentan habe ich auf einem Athlon 3000+ 1GB Ram 500 User und ca. 100 sind im durchschnitt online und das system ist ausgelastet....

Oder gibt es noch ein paar Einstellungen auf die man beim Server (PHP5 SQL 4) achten muß?

Und die letzte Frage - wie kann es sein bzw. wie kann ich verhindern das die DB inserts "verschluckt" , so fehlen ab und an schonmal ganze Flotten und es gibt leere Kampfberichte.

Schonmal Danke im vorraus.
gepostet vor 19 Jahre, 5 Monate von Crafty-Catcher
Wenn 100 User pro Sekunde klicken, dann muss jede Seite min. 8 DB Anfragen haben, da aber kaum alle 100 gleichzeitig klicken werden und sagen wir mal die 100 im Schnitt 4 mal pro Minute klicken, dann sind das 400 Seiten pro Minute = 6,6 Seiten pro Sekunde

800 / 6,6 = 121 DB Anfragen pro Seite? Wovon nur 6,6 DB connects. Kann das hinkommen?
gepostet vor 19 Jahre, 5 Monate von woodworker
Original von The_Alien
Also, ich habe da mal ein paar Fragen.

Zum einen geht es um die DB Art - momentan nutze ich mysql. Als verbesserte Version gibt es ja das mysqli - da wollte ich mal fragen ob da schon einer Erfahrungen mit hat, zumal diese Version ja auch Transaktionen unterstützt.

Als nächstes hatte ich mir InnoDB angeschaut, aber sehr unterschiedliche Meinungen darüber gehört.



also mysql ist die datenbanksoftware

in php gibt es 2 extensions um auf mysql zuzugreifen ext/mysql und ext/mysqli (ok gibt mehr dbx geht ja auch noch)

und innodb ist eine speicherengine in mysql

und transactionen werden nur mit dieser unterstützt wenn du wie ich annehme myisam nutzt kannst du auch mit der mysqli extesnion keine transaktionen nutzen

und transactionen gehen auch mit ext/mysql nur ext/mysqli hat dne vorteil das es eine dierekte funktion in php dafür gibt. in ext/mysql müsstest du nur ein mysql query mit start transaction absetzen.


also ext/mysql und ext/mysqli sin zugriffs methoden auf dein mysql datenbankserver
innodb ist eine storageengine in deinem mysql server
gepostet vor 19 Jahre, 5 Monate von Gambler
man sollte noch erwähnen dass MySQL ab 4.1 neue Aktionen beherrscht. Diese sind teilweise nur mit der MySQLi Extension benutzbar.
Teilweise bekommt man durch die neuen Aktionen wie prepared Statements nen netten Geschwindigkeitszuwachs.
gepostet vor 19 Jahre, 5 Monate von The_Alien
Das InnoDB eine Engine ist und die anderen Methoden war mir klar, ich fragte deswegen weil einige meinten InnoDB wäre schneller und besser wie SQL. Zumal man InnoDB ja auch über SQL nutzen kann (grob gesagt)

Wollte halt wissen ob die geschwindigkeit bei InnoDB wirklich um einiges höher ist.

Tja, das mit den 800 Abfragen/Sekunde habe ich mich auch schon gefragt - momentan habe ich halt das Problem das SQL 90% der Cpu benötigt und alles zum erliegen bringt.

Nur wüßte ich nichtmal wo ich die ganzen abfragen haben sollte - zumal ich das komplette script nun schon mehrmals überarbeitet & optimiert habe.


Und halt noch die Frage ob man es nicht irgendwie einrichten kann das PHP eine dauerhafte Verbindung hat.
gepostet vor 19 Jahre, 5 Monate von Gambler
Hast du auch Abfragen in Schleifen oder die mehrmals nur mit anderen Werten vorkommen in einem Script?
Dann bau Prepared Statements ein wenn du diese nicht sogar schon hast.

Von mysql_pconnect ist abzuraten. Bringt keine Geschindigkeitsvorteile. Und eine Möglichkeit die Verbindung dauerhaft zu erhalten gibt es auch nicht da man ja einen link identifier brauch.
gepostet vor 19 Jahre, 5 Monate von HSINC
mal so als tipp, würfel keine äpfel mit birnen durcheinander, innodb ist eine storageengine unter mysql und sql ist eine abfragesprache für datenbanken. und 800 q/sec ist ein wenig viel für ein spiel mit 500 usern.
gepostet vor 19 Jahre, 5 Monate von Gambler
Ach was mir noch einfiel Qcache aktivieren oder in den Scripten Manuell den Cache benutzen wos Sinn macht.
gepostet vor 19 Jahre, 5 Monate von The_Alien
Original von Gambler
Ach was mir noch einfiel Qcache aktivieren oder in den Scripten Manuell den Cache benutzen wos Sinn macht.


Ich dachte Cache ist bei SQL standartmäßig eingeschaltet.....

btw. - welches sind gute daten für die einstellungen bei SQL - grade was die Limits und Cachesize angeht, zb habe ich

query cache size 33554432
delayed insert limit 100
delayed insert timeout 300
delayed queue size 1000
interactive timeout 28800
max connections 200
max delayed threads 150

bzw auf welche Werte muß ich sonderlich achten/einstellen.
gepostet vor 19 Jahre, 5 Monate von woodworker
SQL ist eine abfrage sprache wieso sollte eine abfragesprache ein cache haben?

Mysql Server ab glaube ich version 4 haben die funktion
gepostet vor 19 Jahre, 5 Monate von The_Alien
Ich meine ja MySql , also die einstellungen für die Enigne
gepostet vor 19 Jahre, 5 Monate von woodworker
ja soory fürs ständige klugscheissen

aber ich habe nunmal sowas echt satt weil bin in ein paar linux channel und ständig kommen welche rein und fragen ja wie löse ich das problem ich habe linux 9
gepostet vor 19 Jahre, 5 Monate von The_Alien
Is ja kein Problem, für mich ist SQL halt = MySql da ich halt dieses seid eh und jeh nutze - also eher mein Fehler.

Aber wie ist es nun bei Einstellungen von MySql?

Weil ich mußte grade eben zb feststellen das SQL ausgelastet ist (teilweise bis zu 3 min für eine Seite) , der Ram jedoch nur zu ca. 40-50%. Dafür aber die Auslagerungsdatei zu 10% benutzt ist.

Also wenn einer ein paar Tipps zur einstellung des MySql Servers hat immer her damit
gepostet vor 19 Jahre, 5 Monate von elzair
wie kommst du denn auf 800?
fragst du jede spalte einzeln ab?
gepostet vor 19 Jahre, 5 Monate von Mudder
Ähm habe ich nun etwas nicht mitbekommen oder ist euch dies nur nicht aufgefallen...

MySQLi = MySQL Light
SQL-Datenbank auf Dateibasis welche für kleine Homepages gedacht ist. Das Ding ist nicht für größere Datenmengen oder komplexere Abfragen gedacht und somit auch nicht wirklich mit einer "normalen" Datenbank vergleichbar. Das ist einfach nur dazu da um auf kleineren Homepages ohne MySQL-Server ebenfalls ne Datenbank zur Verfügung zu haben indem das ganze eben per PHP-Modul übernommen wird.
gepostet vor 19 Jahre, 5 Monate von HSINC
MySQLi sind die erweiterten MySQL funktionen von php die für den umgang von php mit der mysql 4.1 entwickelt wurden.

mudder was du meinst ist SQLite
gepostet vor 19 Jahre, 5 Monate von Mudder
ja ok SQLite war das.. Sorry!
gepostet vor 18 Jahre, 9 Monate von BjoernLilleike
Hier ist zwar ziemlich viel zu den Formulierungsschwächen des Fragers gepostet worden, aber keine echte Antwort

Dafür ergänze ich den Thread mal mit einer konkretisierten Frage:
Welche der verschiedenen storage engines von MySQL ist denn für welchen Zweck besonders gut geeignet?

Die Wichtigsten scheinen mir:
* MyISAM
* InnoDB
* HEAP (Memory)
zu sein, wobei HEAP aufgrund seines Spezialverhaltens quasi außen vor ist für Spezialfälle.
Wenn ich sichere Transaktionen brauche, dann benutze ich InnoDB, aberin welchen Fällen ist MyISAM vorzuziehen?

HEAP kann ich mir
gepostet vor 18 Jahre, 9 Monate von woodworker
Ok

MySQL Speicher Engines:
InnoDB -> Support für Transaktionen aber eher etwas langsam
MyISAM -> Recht schnelle Speicher engine weil eben auf geschwindigkeit programmiert und sachen wie transaktionen weggelassen wurden
HEAP -> Tabellen daten werden im RAM gehalten also eher was für temporäre daten wie sessions

dann gibts noch die eher nebensächlichen
MERGE -> eine tabelle kann mehrer andere tabellen zusammenfassen (müssen aber alle die selbe struktur haben)

Infos:
MySQL 4.x und 3.x
MySQL 5.0
MySQL 5.1

Zugriffsmethoden mit PHP:
ext/mysql -> ist die standrad methode in php recht alt aber sie funktioniert
ext/mysqli -> die neue extension zugriff dierekt per OOP man brauch keine kapselklasse mehr, support für die neuen funktionen von mysql 4.1 wie das komprimierte binär protokoll das eine menge traffic spart genau wie prepared statements
ext/pdo -> die standard db extension in php 5.1 und die einzigste in der standard installation von php6 - support für prepared statements und bei nutzung von einfachem sql auch leicht portierbar in dem man einfach den pdo treiber wechselt (verfügbar für oracle, sqlite, pgsql,firebird,informix,mssql und odbc).

ich hoffe diese infos reichen
gepostet vor 18 Jahre, 9 Monate von BjoernLilleike
Vielen Dank für die Infos. Also kann man MyISAM überall dort bevorzugen, wo es keine konkurrierenden UPDATEs/INSERTS gibt.

Bei den Zugriffsmethoden muss ich gestehen, bin ich bisher beim alten Standard geblieben, weil mir das andere alles zu neu im Sinne von unerprobt erschien.
* bei ext/mysgli steht in der Doku explizit experimentell
* ext/pdo ist gerade erst ein paar Monate alt.

Das das alles so kompliziert sein muss mit den Datenbanken
gepostet vor 18 Jahre, 9 Monate von woodworker
mysqli ist recht stabil - habs selber ne zeit lang genutzt von experimentel sehe ich da nix in der doku

aber bin jetzt auf PDO umgestigen udn PDO ist explizit als stable eingetragen



axo nochwas InnoDB erlaubt locking auf zeilen eben und MyISAM nur tabellenweit
gepostet vor 18 Jahre, 9 Monate von schokofreak
Original von woodworker
ext/pdo -> die standard db extension in php 5.1 und die einzigste in der standard installation von php6 -


Das heisst in PHP 6.0 muss man mysqli manuell nachinstallieren? Mal wieder die schöne Konsistenz von PHP
In dem fall rennt jeder in Probleme, wer mysql oder mysqli nutzt?

Gruss
gepostet vor 18 Jahre, 9 Monate von woodworker
Original von schokofreak
Original von woodworker
ext/pdo -> die standard db extension in php 5.1 und die einzigste in der standard installation von php6 -


Das heisst in PHP 6.0 muss man mysqli manuell nachinstallieren? Mal wieder die schöne Konsistenz von PHP
In dem fall rennt jeder in Probleme, wer mysql oder mysqli nutzt?

Gruss

in php6 wirst du ne menge anders mahcen müssen
vorallem weil die devs drüber nachdenken endlich einheitliche funktionsnamen vergeben wollen und auch parameter ornder wollen sie vereinheitlichen

register_globals, magic quotes und sowas fallen total weg gibts garnicht mehr dann

Mehr Infos hier: http://www.php.net/~derick/meeting-notes.html
gepostet vor 18 Jahre, 9 Monate von schokofreak
hmmm... das tönt ja so als könnte man PHP danach sogar ernst nehmen?
Ich mein es gibt ja keine Sprache mit doferer Library als PHP... inkonsistenzen pur.

Hmpf... mal warten bis es ne Beta von PHP6 gibt, dann sehen wirs endgültig.

Gruss
gepostet vor 18 Jahre, 9 Monate von Kampfhoernchen
Original von schokofreak
hmmm... das tönt ja so als könnte man PHP danach sogar ernst nehmen?
Ich mein es gibt ja keine Sprache mit doferer Library als PHP... inkonsistenzen pur.

Hmpf... mal warten bis es ne Beta von PHP6 gibt, dann sehen wirs endgültig.

Gruss


Doch. Java. Da findet man nix, weil das ganze Zeugs völlig wirr strukturiert ist.
gepostet vor 18 Jahre, 9 Monate von schokofreak
Java ist zwar wirr strukturiert. Hat man das system aber mal durchblickt, findet man alles. Es hat ne einheitliche (wenn auch idiotische) Namensgebung.

PHP ist jedes Package in ner total anderen Namensgebung. Zwar bequemer um sich kurz mal zurechtzufinden. Aber arbeitet man viel damit, fängt man an zu fluchen.
gepostet vor 18 Jahre, 9 Monate von Kampfhoernchen
Ich behaupte mal, dass ich viel damit arbeite. Also so 10 Stunden die Woche mindestens, ob hobbymäßig oder für Geld. Ich habe noch keine Schwierigkeiten feststellen müssen.
gepostet vor 18 Jahre, 9 Monate von HSINC
die namensgebung und die parameterpositionen von funktionen sind in php defintiv nicht einheitlich, ich muss auch immer nachschauen was wo nun hin muss

Auf diese Diskussion antworten