Seite 1 von 1

pysqlite super langsam?

Verfasst: Sonntag 30. April 2006, 19:39
von Hardware
ich habe eine tabelle mit 9300 rows auf einer disk datenbank
ein select count dauert da ca. 1s auf einem p4 mit 3ghz
kann das normal sein?

Verfasst: Sonntag 30. April 2006, 23:17
von Masaru
Kann ... hast du häufig z.B. einen Int Datentyp vorhanden? Meinen Infos nach bildet pySQlite z.B. Int Werte nicht einheitlich codiert (8 Byte, 16 Byte), etc. ab, sondern gerade nur mit "soviel wie notwendig". Dadurch kommen zwar (in Relation zu anderen DMBS Instanzen) kleine DB-Dateien zu stande, aber das "durcharbeiten" dauert länger.

Verfasst: Montag 1. Mai 2006, 07:15
von BlackJack
Falls es wirklich ein "SELECT count(*) FROM foo" ist, dann sollte die Kodierung von Zellen egal sein.

Kannst Du etwas mehr über die Tabelle und die genaue Abfrage verraten?

Verfasst: Montag 1. Mai 2006, 17:44
von Hardware
liegt am python interpreter
wenn ich das compiled ablaufen lasse ist es 20x schneller
?????????????????

Verfasst: Montag 1. Mai 2006, 20:42
von Joghurt
Meinst du mit compiled C (oder anderen) Code?

Poste doch mal einfach deinen Pythoncode

Verfasst: Montag 1. Mai 2006, 20:56
von Hardware
Joghurt hat geschrieben:Meinst du mit compiled C (oder anderen) Code?

Poste doch mal einfach deinen Pythoncode
ist einfach ein select count * from foo

als py ewig langsam
als exe py2exe wesentlich schneller

Verfasst: Montag 1. Mai 2006, 21:03
von Joghurt
Py2exe kompiliert auch nicht.

Python code wird immer als Bytecode ausgeführt.

No Code, No Party - ähm - no help possible

Verfasst: Montag 1. Mai 2006, 22:34
von Hardware
ist wirklich sehr komisch

py2exe macht es extrem schneller

Code: Alles auswählen

        #print "start qry"

        #qry = "SELECT COUNT(hash) FROM cache"
        #qry = "select  count(  piece_id)  from cache "
        #print qry
        self.cur.execute(qry)
        res = self.cur.fetchall()
        if res == []:
            return 0
        #print res
        res = res[0]
        #print "end qry"
        #print res
der qry geht da immer ca 1s (von "start qry" bis "end qry")
hab schon alle Arten von count probiert
ist aber kein Problem da es ja mit dem py2exe geht

Edit (Leonidas): Code in Python-Tags gesetzt.

Verfasst: Dienstag 2. Mai 2006, 08:37
von mr.hide
ich denke nicht dass das an der DB Verbindung liegt, sondern eher daran dass er beim Aufrufen eines Python Files an sich länger braucht als beim aufrufen einer py2exe. - Zumindest meine Erfahrungen.

Evtl. liegt das ja daran dass er bei py2exe nur einen abgespeckten Interpreter lädt.

Probier doch mal folgendes, lass so ein Skript laufen, bevor du das Python File mit der DBVerbindung aufrufst, dann ist der Interpreter schon im Speicher...

Code: Alles auswählen

import time
time.sleep(10000)
Dann hast du evtl. die Ursache ...

Verfasst: Dienstag 2. Mai 2006, 08:55
von Hardware
mr.hide hat geschrieben:ich denke nicht dass das an der DB Verbindung liegt, sondern eher daran dass er beim Aufrufen eines Python Files an sich länger braucht als beim aufrufen einer py2exe. - Zumindest meine Erfahrungen.

Evtl. liegt das ja daran dass er bei py2exe nur einen abgespeckten Interpreter lädt.

Probier doch mal folgendes, lass so ein Skript laufen, bevor du das Python File mit der DBVerbindung aufrufst, dann ist der Interpreter schon im Speicher...

Code: Alles auswählen

import time
time.sleep(10000)
Dann hast du evtl. die Ursache ...
ne das Script rennt schon die ganze Zeit und andere Zugriffe auf die Datenbank sind schnell.
Nur dieser ist superlangsam.
Kann mir das nicht erklären.

Wers mal sehen will
www.proxyshare.com