私はshinyとRに非常に新しいですが、shinyを使用して、そこからデータを取得するデータベースに接続しようとしています。ブラウザでRShinyの作業に継続的にアクセスしようとすると、Cannot allocate a new connection: 16 connections already opened
。このエラーやRShinyが一度に16人のユーザーしか期待できない場合、どうすれば解決できますか?ここに別のスタックポストがあります RStudio Shiny Error mysqlNewConnection maximum 16 connections しかし、上記のURLの説明は明確ではありませんでした。
コードでクエリを送信するたびに、obj <- dbConnect(...)
で新しいDB接続を開く可能性があります。作成したオブジェクトでdbDisconnect(obj)
を呼び出すだけで、クエリの実行後に毎回、それぞれの接続を強制終了できます。
また、この関数を使用して、開いているすべての接続を一度に強制終了できます。
library(RMySQL)
killDbConnections <- function () {
all_cons <- dbListConnections(MySQL())
print(all_cons)
for(con in all_cons)
+ dbDisconnect(con)
print(paste(length(all_cons), " connections killed."))
}
開始と終了のすべてを処理する、光沢のある外部の小さな関数を作成することをお勧めします。
library(RMySQL)
sqlQuery <- function (query) {
# creating DB connection object with RMysql package
DB <- dbConnect(MySQL(), user="youruser", password='yourpassword', dbname='yourdb', Host='192.168.178.1')
# close db connection after function call exits
on.exit(dbDisconnect(DB))
# send Query to btain result set
rs <- dbSendQuery(DB, query)
# get elements from result sets and convert to dataframe
result <- fetch(rs, -1)
# return the dataframe
return(result)
}
お役に立てば幸いです!
この問題が発生した場合は、まず次のコードをインタラクティブに実行して、MySQLデータベースへのすべての接続を切断する必要があります。
lapply(dbListConnections(MySQL()), dbDisconnect)
(別のデータベース管理システムを使用している場合は、MySQL()を別のDBIドライバーに置き換えることができます)。
Rセッションを再起動するだけです:command/ctrl + shift + F10
RStudioで
適切に切断する方法を光沢のある方法で伝える必要があります。その部分はユースケースに依存します。輝くたびに接続を開始する場合は、server.ui
:
session$onSessionEnded(function(){
dbDisconnect(con)
}
Conはあなたの接続です。クエリを実行するたびに接続を開始する場合、クエリの実行後すぐに切断する必要があります。
また、接続を管理するために、光沢のあるチームによって 推奨 であるpool
パッケージを見てください。データベースに関する Shiny Articles に関する非常に役立つセクションもあります。
私の場合、dbDisconnect()は機能していませんでした。だから私は端末からMySQLサーバーを停止し、再び使用を開始しました
須藤サービスmysql停止
Sudoサービスmysqlの開始
次に、dbDisconnect()を使用してコードを実行しました。