Improve SQLite performance (#2111)

* tune sqlite upon connection

* catch operational error

* use wal for journal_mode for faster performance
This commit is contained in:
ming 2024-06-11 11:44:48 -04:00 • committed by GitHub
commit ad23cac117
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -9,6 +9,8 @@ from alembic.config import Config
from loguru import logger from loguru import logger
from sqlalchemy import inspect from sqlalchemy import inspect
from sqlalchemy.exc import OperationalError from sqlalchemy.exc import OperationalError
from sqlalchemy.engine import Engine
from sqlalchemy import event
from sqlmodel import Session, SQLModel, create_engine, select, text from sqlmodel import Session, SQLModel, create_engine, select, text
from langflow.services.base import Service from langflow.services.base import Service
@ -53,6 +55,20 @@ class DatabaseService(Service):
max_overflow=self.settings_service.settings.max_overflow, max_overflow=self.settings_service.settings.max_overflow,
) )
@event.listens_for(Engine, "connect")
def on_connection(dbapi_connection, connection_record):
from sqlite3 import Connection as sqliteConnection
if isinstance(dbapi_connection, sqliteConnection):
logger.info("sqlite connect listener, setting pragmas")
cursor = dbapi_connection.cursor()
try:
cursor.execute("PRAGMA synchronous = NORMAL")
cursor.execute("PRAGMA journal_mode = WAL")
cursor.close()
except OperationalError as oe:
logger.warning("Failed to set PRAGMA: ", {oe})
def __enter__(self): def __enter__(self):
self._session = Session(self.engine) self._session = Session(self.engine)
return self._session return self._session