1

データベース クエリ中にフリーズする Qt アプリケーションがあります。これは、同時にバックグラウンドで SQL ダンプが実行されているためです (夜間のバックアップ中に発生しています)。MySQL DB は innoDB であり、パフォーマンスの問題のために MyISAM に変更することはできません。

query.exec()データベース接続の疑似コードは次のとおりで、その後にロック機能が続きます。

QSqlDatabase _db = QSqlDatabase::addDatabase(QT_DB_TYPE, _con);

_db.setConnectOptions("MYSQL_OPT_RECONNECT=1;");
_db.setHostName("127.0.0.1");
_db.setDatabaseName("qtapp_db");
_db.setUserName("qtuser");
_db.setPassword("xxx");
_db.setPort("90000");
bool ok = _db.open();

qDebug() << "DBG: ############# db status: isopen()"<< _db.isOpen() << ", is valid; " << _db.isValid();

QSqlQuery query(_db);
query.prepare("INSERT huge_table {...}");

query.exec()

INSERT を実行する前に、テーブル huge_table がロックされているかどうかを検出したいと思います。しかし_db.isValid()、and_db.isOpen()はtrueを返します(とにかく、データベースではなく、テーブル自体でこれを確認する必要があります)。

ヒントをありがとう。

4

0 に答える 0