2015-01-21 2 views
3

У меня возникла странная проблема, которая возникает на моем ящике CentOS 6.5, размещенном на AWS, который не возникает на моей машине Windows.Ошибка в dbSendQuery с RPostgreSQL и RJDBC на CentOS 6.5, а не на Windows 7

При отправке большого dbSendQuery (строка с 15 000 + байтами/символами), я получаю сообщения об ошибках. С меньшими запросами он работает нормально.

Первоначально, я думал, что это проблема с моей установкой Postgres, поэтому я обновился до 9.4, но все же получил ту же ошибку с RPostgreSQL. Моя следующая мысль заключалась в том, что это проблема SSL, поэтому я попытался с RJDBC с флагом sslmode = disable, но это тоже не сработало.

Это сообщение об ошибке с RPostgreSQL:

> library(RPostgreSQL) 
Loading required package: DBI 
> rsdrv <- dbDriver("PostgreSQL") 
> rscon <- dbConnect(rsdrv, dbname="dbname",host="redshift.connection.string",port=5439,user="username",password="password") 
> dbSendQuery(rscon,query) 
Error in postgresqlExecStatement(conn, statement, ...) : RS-DBI driver: (SSL SYSCALL error: Connection timed out) 

Это ошибка с RJDBC:

> library(RJDBC) 
> pgsql <- JDBC("org.postgresql.Driver", "/postgresql-9.3-1102.jdbc41.jar", "`") 
> con <- dbConnect(pgsql, "jdbc:postgresql://redshift.connection.string:5439/dev?sslmode=disable", "username", "password") 
> dbSendQuery(con,query) 
Error in .jcall(s, "Ljava/sql/ResultSet;", "executeQuery", as.character(statement)[1], : ignoring SIGPIPE signal 

Вот sessioninfo() на моем CentOS 6,5

> sessionInfo() 
R version 3.1.2 (2014-10-31) 
Platform: x86_64-redhat-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C 
[3] LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8 
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 
[7] LC_PAPER=en_US.UTF-8  LC_NAME=C 
[9] LC_ADDRESS=C    LC_TELEPHONE=C 
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 

other attached packages: 
[1] RPostgreSQL_0.4 DBI_0.3.1 

Вот sessionInfo() в Windows 7:

> sessionInfo() 
R version 3.1.2 (2014-10-31) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] RPostgreSQL_0.4 DBI_0.3.1  

loaded via a namespace (and not attached): 
[1] tools_3.1.2 

Я бы приложил пример dbSendQuery() запроса, который вызывает эти ошибки, но поскольку они составляют 15 000 символов, я не уверен, что это хорошая идея. Для этого используется автоматическое создание оператора CREATE TABLE, в моем случае столбцы 500 ++. На моей машине с Windows он отправляет запрос через полсекунды, а на стороне Redshift создает таблицу почти мгновенно, поэтому нет проблемы с тем, что запрос занимает слишком много времени (и тайм-аут ..?)

Благодаря!

+1

http://pastebin.com/1h2dKMGs Это ссылка на запрос, который я тестирую. –

ответ

3

Звучит так, как будто это может быть связано с MTU вашего сетевого интерфейса. Можете ли вы попытаться настроить MTU на 1500: Пример Настройка MTU на CentOS: ip link set dev eth0 mtu 1500

добавить MTU = 1500 в конец этого/etc/sysconfig/network-scripts/ifcfg-eth0

+1

Это работало как шарм! Теперь все работает гладко. Цените помощь! –

+0

Можете ли вы объяснить, что это делает? – CaffeineConnoisseur

Смежные вопросы