Sono molto nuovo a lucido e R ma utilizzando lucido sto provando a connettermi a un database per recuperare i dati da lì. Quando provo ad accedere al mio lavoro RShiny sul browser in modo continuo, ho ricevuto un errore come Cannot allocate a new connection: 16 connections already opened
. Come posso superare questo errore o Rshine mi aspetto solo 16 utenti alla volta ?. Ho ottenuto un altro post stack qui RStudio Shiny Error mysqlNewConnection maxinum of 16 connections ma la spiegazione non era chiara nell'url sopra.Impossibile allocare una nuova connessione: 16 connessioni già aperte RMySQL
risposta
Forse si apre una nuova connessione DB con obj <- dbConnect(...)
ogni volta che si invia una query nel codice. Puoi semplicemente chiamare dbDisconnect(obj)
sull'oggetto che hai creato per terminare la rispettiva connessione ogni volta che la query è stata eseguita.
Inoltre è possibile utilizzare questa funzione uccidere tutte le connessioni aperte in una sola volta:
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."))
}
avrei recommed di scrivere una piccola funzione di fuori lucido che gestisce l'intera apertura e chiusura cosa:
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)
}
Spero che questo aiuti!
Grazie a @ThankGoat. Questo è stato davvero utile e risolto il problema. Ma puoi spiegare da dove ho ricevuto la documentazione corretta per tutti questi. – anoop
È tutto nella documentazione del pacchetto RMySQL. Basta digitare '? RMySQL' nella console e iniziare a leggere;) – ThankGoat
Consiglio caldamente l'uso di' on.exit (dbDisconnect (DB)) 'subito dopo' DB <- dbConnect'.In caso contrario, gli errori di sintassi della query lasceranno la connessione aperta. – Marek
dbDisconnect() non funzionava nel mio caso. Così mi ero fermato server MySQL dal terminale e di nuovo iniziato a utilizzare
avviare il servizio sudo mysql fermata
servizio sudo mysql
Poi mi sono imbattuto il codice con l'utilizzo di dbDisconnect() ora il suo lavoro per me.
Se si ottiene questo problema, è necessario prima eseguire il seguente codice in modo interattivo di scollegare tutte le connessioni al database MySQL:
lapply(dbListConnections(MySQL()), dbDisconnect)
(Si noti che è possibile sostituire MySQL() da un altro driver DBI, se usi un altro sistema di gestione del database).
Quindi, è necessario esplicitare a lucido come disconnettere correttamente. Quella parte dipende dal caso d'uso. Se si avvia una connessione ogni volta che si avvia lucido, si potrebbe aggiungere all'interno server.ui
:
session$onSessionEnded(function(){
dbDisconnect(con)
}
Dove condizionata è il vostro legame. Se si avvia una connessione ogni volta che si esegue una query, è necessario disconnettersi immediatamente dopo l'esecuzione della query.
Si dovrebbe anche dare un'occhiata al pacchetto pool
che è suggested dal team lucido per gestire le connessioni. C'è anche una sezione molto utile su Shiny Articles sul database.
- 1. RMySQL: chiusura di una connessione senza handle
- 2. Chiusura delle connessioni attive utilizzando RMySQL
- 3. come posso contare Akka attuali connessioni aperte
- 4. numero di connessioni aperte e il significato di dormire stato di una connessione
- 5. Connessione al database MySQL con RMySQL
- 6. Socket.IO - le connessioni aperte sono un problema?
- 7. Grazioso riavvio per mantenere le connessioni aperte
- 8. RMySQL dbWriteTable con field.types
- 9. Impossibile allocare memoria
- 10. Ruby: Impossibile allocare memoria
- 11. mmap: Impossibile allocare memoria
- 12. RubyODBC Impossibile allocare SQLHENV
- 13. Impossibile allocare CursorWindow
- 14. playframework - IOException impossibile allocare memoria
- 15. Python Tornado Websocket Connessioni ancora aperte dopo la chiusura
- 16. Le connessioni TCPC WCF rimangono aperte quando il processo viene interrotto
- 17. Come posso monitorare/monitorare le connessioni JMS aperte/chiuse in Glassfish?
- 18. Come allocare memoria con un allineamento di 16 byte?
- 19. Come elencare le connessioni attive/aperte in Oracle?
- 20. java.net.SocketException: Impossibile allocare memoria (non Mac)
- 21. Come verificare il numero di connessioni aperte in node.js?
- 22. Ottieni tutte le connessioni TCP aperte dall'applicazione utilizzando C#
- 23. mysql: vedi tutte le connessioni aperte a un determinato database?
- 24. Impossibile installare i moduli, Impossibile allocare errori di memoria?
- 25. Impossibile allocare gli spazi degli indirizzi richiesti
- 26. Qual è il numero massimo teorico di connessioni TCP aperte che una moderna macchina Linux può avere
- 27. Ubuntu - elasticsearch - Errore: Impossibile allocare memoria
- 28. MySQL - connessione permanente contro il pool di connessioni
- 29. memoria virtuale esaurita: Impossibile allocare memoria
- 30. Impossibile allocare memoria (No MemoryError) in Ruby?
Hai * bisogno * di connessioni 16+ aperte contemporaneamente o stai cercando un modo per chiudere le connessioni inutilizzate? Se è il primo, [questo post del blog] (http://fransvandunne.com/2015/07/allow-for-more-than-16-rmysql-connections-in-r/) sembra fornire una soluzione. – nrussell
Apri una connessione prima di 'shinyServer' e usa questa unica connessione per tutto il tempo. –