Ik heb een website gemaakt in PHP5 waarbij ik gebruik heb gemaakt van het Zend platform en een eenvoudige SQLite database waarbij ik gebruik heb gemaakt van Zend_Db_Adapter_Pdo_Sqlite voor de database toegang. Op mijn eigen PC (een Linux systeem) werkte het allemaal prima, maar op de webhost (ook een Linux systeem) werkt het niet altijd, of beter gezegd meestal niet. Ik krijg dan namelijk een Zend_Db_Statement_Exception met als bericht:
Dit is niet altijd zo, soms doet hij het een uurtje wel, dan weer een uurtje niet.
Het probleem lijkt dus in het locking-systeem van SQLite te zitten, waarschijnlijk dat een bepaalde lock niet weer op tijd vrijgegeven wordt. Ik heb al geprobeerd of het helpt om als de database gelocked is deze opnieuw te uploaden vanaf mijn eigen systeem waar deze wel werkt, maar dat helpt niet. De locks zitten dus waarschijnlijk niet opgeslagen in het databasebestand zelf, maar ergens anders.
Een mogelijke oorzaak kan natuurlijk zijn dat, doordat de website op een multithreaded webserver draait waarbij er meerdere requests tegelijk afgehandeld moeten worden, een proces de database gelockt heeft als een ander proces deze ook nodig heeft. Echter worden er op de database normaliter alleen SELECT queries uitgevoerd (de pagina's zitten in de database opgeslagen en deze kunnen slechts aangepast worden door de beheerder) en in principe zou het lockingsysteem van SQLite hier prima mee om moeten kunnen gaan (zie hier voor meer info over het lockingsysteem).
Overigens leek het uitvoeren van beheertaken op de pagina's met als gevolg wijzigingen in de database op momenten dat deze niet gelocked was niet van invloed te zijn, ofwel ik kon rustig op momenten dat het werkte pagina's aanmaken / aanpassen / verwijderen.
Mijn probleem is dus dat de database gelocked wordt en waarschijnlijk niet weer geunlocked. Ik zou dan ook graag willen weten of iemand dit vaker meegemaakt heeft of misschien dat iemand weet waar dit aan kan liggen. Dit is namelijk ook mijn eerste project waarbij ik Zend_Db gebruik voor databasetoegang en tevens de eerste keer dat ik een SQLite database gebruik (andere RDBMS'en worden niet ondersteund door de host).
Misschien dat iemand weet hoe / waar de locks opgeslagen worden door SQLite zodat ik dat eens in de gaten kan houden? Of misschien dat SQLite een logboek bijhoud van de locks?
code:
1
| 'SQLSTATE[HY000]: General error: 5 database is locked' |
Dit is niet altijd zo, soms doet hij het een uurtje wel, dan weer een uurtje niet.
Het probleem lijkt dus in het locking-systeem van SQLite te zitten, waarschijnlijk dat een bepaalde lock niet weer op tijd vrijgegeven wordt. Ik heb al geprobeerd of het helpt om als de database gelocked is deze opnieuw te uploaden vanaf mijn eigen systeem waar deze wel werkt, maar dat helpt niet. De locks zitten dus waarschijnlijk niet opgeslagen in het databasebestand zelf, maar ergens anders.
Een mogelijke oorzaak kan natuurlijk zijn dat, doordat de website op een multithreaded webserver draait waarbij er meerdere requests tegelijk afgehandeld moeten worden, een proces de database gelockt heeft als een ander proces deze ook nodig heeft. Echter worden er op de database normaliter alleen SELECT queries uitgevoerd (de pagina's zitten in de database opgeslagen en deze kunnen slechts aangepast worden door de beheerder) en in principe zou het lockingsysteem van SQLite hier prima mee om moeten kunnen gaan (zie hier voor meer info over het lockingsysteem).
Overigens leek het uitvoeren van beheertaken op de pagina's met als gevolg wijzigingen in de database op momenten dat deze niet gelocked was niet van invloed te zijn, ofwel ik kon rustig op momenten dat het werkte pagina's aanmaken / aanpassen / verwijderen.
Mijn probleem is dus dat de database gelocked wordt en waarschijnlijk niet weer geunlocked. Ik zou dan ook graag willen weten of iemand dit vaker meegemaakt heeft of misschien dat iemand weet waar dit aan kan liggen. Dit is namelijk ook mijn eerste project waarbij ik Zend_Db gebruik voor databasetoegang en tevens de eerste keer dat ik een SQLite database gebruik (andere RDBMS'en worden niet ondersteund door de host).
Misschien dat iemand weet hoe / waar de locks opgeslagen worden door SQLite zodat ik dat eens in de gaten kan houden? Of misschien dat SQLite een logboek bijhoud van de locks?