Список подключений Sqlite - PullRequest
       1

Список подключений Sqlite

1 голос
/ 19 сентября 2011

Я соединяюсь с SQlite, используя драйвер JDBC. Я хочу проверить из командной строки SQLite, сколько соединений открыто в ядре базы данных. Кто-нибудь может сказать мне, как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

SQLite - это встроенная база данных - каждый процесс, который обращается к файлу базы данных, по сути, имеет свой собственный механизм БД. Единственное взаимодействие между отдельными механизмами происходит через средства блокировки файлов базовой операционной системы, которые гарантируют, что различные процессы не будут наступать друг на друга при попытке обновить файл БД.

Из-за этой конструкции нет единой контрольной точки в отношении SQLite. Утилита оболочки sqlite3 по сути содержит копию самого механизма базы данных SQLite, и именно так она может обрабатывать файл БД - она ​​не «подключается» к другому приложению. На самом деле, термин «соединение» в документации SQLite используется только (неправильно) из-за его знакомства с инженерами БД - на самом деле это не что иное, как открытие файла или двух.

Таким образом, утилита sqlite3 не может узнать, что делает любое другое приложение, кроме случайного обнаружения заблокированного файла, когда другой процесс модифицирует БД.

Если вы хотите знать, что ваше приложение делает с базовой БД, вам нужно будет найти / написать обертку вокруг базовой библиотеки SQLite3, которая будет выполнять любые дополнительные необходимые операции бухгалтерии - возможно, предоставляя интерфейс управления. Сама базовая библиотека SQLite не имеет таких средств, поскольку считается, что они находятся за пределами ее области действия.

Проблема с подходом обертки заключается в том, что ваше приложение все еще не знает, что делает любой другой процесс. Возможно, вы сможете сделать так, чтобы все процессы, использующие обертку, собирали свои данные в центральной точке доступа (файл / сетевая служба / ...), но это все - любой другой процесс (например, оболочка sqlite3) все равно получит доступ файл БД напрямую.

Если вам нужно знать только количество «подключений» к файлу БД, однако, может быть (определенно непереносимый) способ: каждое «подключение» приводит к открытию файла БД, поэтому вы можете возможность использовать утилиту для конкретной платформы, чтобы узнать, какие процессы открывали файл в каждый момент. Например, в Linux вы можете использовать утилиту lsof.

Кстати, если вы открываете один и тот же файл БД несколько раз из одного экземпляра вашего приложения, вы, возможно, захотите переосмыслить свою архитектуру - в отличие от традиционных серверов БД, открывающих несколько «соединений» с одним файлом БД SQLite. не имеет никакого преимущества в производительности и может даже привести к блокировке приложения, если вы не будете осторожны.

0 голосов
/ 19 сентября 2011

В пакете java.sql нет API для этого. Вы должны сделать это на своей стороне, например, с помощью класса Singleton, позволяющего создавать соединения и отслеживать количество таких созданных соединений.

PS: конечно, это будет только подсчитывать количество соединений в базовом работающем экземпляре JVM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...