OperationTimedOut:错误={},last_host=127.0.0.1

OperationTimedOut: errors={}, last_host=127.0.0.1

我正在使用单节点 Cassandra,我打算 运行 一些查询以检查响应时间。在某些查询中,执行 10 秒后出现以下错误:

OperationTimedOut: errors = {}, last_host = 127.0.0.1

所以我运行下面的命令:

sudo gedit /usr/bin/cqlsh.py

并更改了 cqlsh.py 文件:

# cqlsh should run correctly when run out of a Cassandra source tree,
# out of an unpacked Cassandra tarball, and after a proper package install.
cqlshlibdir = os.path.join(CASSANDRA_PATH, 'pylib')
if os.path.isdir(cqlshlibdir):
    sys.path.insert(0, cqlshlibdir)

from cqlshlib import cql3handling, cqlhandling, pylexotron, sslhandling
from cqlshlib.displaying import (ANSI_RESET, BLUE, COLUMN_NAME_COLORS, CYAN,
                                 RED, FormattedValue, colorme)

from cqlshlib.formatting import (DEFAULT_DATE_FORMAT, DEFAULT_NANOTIME_FORMAT,
                                 DEFAULT_TIMESTAMP_FORMAT, DateTimeFormat,
                                 format_by_type, format_value_utype,
                                 formatter_for)

from cqlshlib.tracing import print_trace, print_trace_session
from cqlshlib.util import get_file_encoding_bomsize, trim_if_present

DEFAULT_HOST = '127.0.0.1'
DEFAULT_PORT = 9042
DEFAULT_CQLVER = '3.3.1'
DEFAULT_PROTOCOL_VERSION = 4
DEFAULT_CONNECT_TIMEOUT_SECONDS = 240

DEFAULT_FLOAT_PRECISION = 5
DEFAULT_MAX_TRACE_WAIT = 300

但是,当我再次尝试 运行 查询时,cql return 10 秒后出现相同的错误:

OperationTimedOut: errors = {}, last_host = 127.0.0.1

我必须做什么才能使查询没有超时回答?

您必须更改 cassandra.yaml 文件中的 read_request_timeout_in_ms 参数。然后重启Cassandra。

您是否在 cqlsh 中执行这些查询?

如果是这样,您将遇到客户端请求超时(不是连接超时,也不是服务器端读取请求超时)。

您可以通过在 ~/.cassandra/cqlshrc 中设置一个来更改默认超时:

[connection]
client_timeout = 20
# Can also be set to None to disable:
# client_timeout = None

有关详细信息,请参阅 https://issues.apache.org/jira/browse/CASSANDRA-7516

我从另一条评论中看到您已经知道分页了。这将是最好的方法,因为它不需要您在数据层和应用层将整个结果集编组到内存中。

您会看到一些回复告诉您如何提高各种超时,但真正的答案是您几乎从不想提高这些超时,因为如果您有一个真实的数据集,您会毁了您的服务器(或删除 requests/mutations)有很多 long-运行 查询。最好使用分页和更短的 运行 查询,而不是大而长的 运行 查询。

最新版本的 cassandra 允许您在使用时指定 cqlsh 超时,而不必编辑您的 cqlshrc 文件。

cqlsh --request-timeout <your-timeout>