概述
数据库缓存是一种性能增强技术,将频繁访问的数据存储在高速内存中,减少对低速磁盘存储的依赖,从而大大提升查询响应速度。
正式使用数据库前,将数据预先加载至缓存中,这一过程也叫预热。如果没有预热,仅在首次通过查询访问数据时,数据才会加载到缓存中,在数据得到缓存前可能出现性能延迟。
缓存数据临时存储在内存中,在服务器重启或手动清除后才被清除。服务器重启后,只要启用了相关缓存类型,即可通过预热操作重新加载缓存,或通过查询访问数据时重新加载。
缓存类型
缓存可存储多种类型数据。嬴图支持以下类型缓存:
缓存大小和逐出策略
图缓存、点缓存和边缓存的大小分别通过graph_cache_size
、node_cache_size
和edge_cache_size
来设置。一旦缓存达到上限,会根据已选策略逐出数据。图缓存可以使用以下任意一种逐出策略:lru
,unlimited
或noeviction
;而点缓存和边缓存默认使用lru
策略。缓存大小可以在服务器配置中进行配置。
缓存状态
使用语句cache.<cacheType>.status()
可以查看所有shard服务器上某类缓存的状态。
// 查看图缓存状态
cache.graph.status()
// 查看点缓存状态
cache.node.status()
// 查看边缓存状态
cache.edge.status()
语句返回_cache_shard_1
,_cache_shard_2
等表格。每个_cache_shard_<N>
表包含ID为<N>
的分片下指定缓存类型的信息,包含以下字段:
字段 |
描述 |
---|---|
status |
某类缓存的当前状态,包括On 和Off |
cache_size |
某类缓存的最大分配大小(单位为MB),即服务器配置中的graph_cache_size ,node_cache_size 或edge_cache_size |
开启指定类型缓存
使用语句cache.<cacheType>.turnOn()
可以为所有shard服务器开启指定类型缓存。该操作以作业形式进行,稍后可使用show().job(<id?>)
确认是否开启成功。
开启操作与服务器配置中的enable_graph_cache
、enable_node_cache
和enable_edge_cache
设置保持一致。请注意,服务器重启后,这些设置会恢复成初始设置。
// 为所有图集的所有主副本开启图缓存
cache.graph.turnOn()
// 为所有图集的所有主副本和从副本开启图缓存
cache.graph.turnOn({followers: true})
// 为所有图集的所有主副本开启点缓存
cache.node.turnOn()
// 为所有图集的所有主副本和从副本开启点缓存
cache.node.turnOn({followers: true})
// 为所有图集的所有主副本开启边缓存
cache.edge.turnOn()
// 为所有图集的所有主副本和从副本开启边缓存
cache.edge.turnOn({followers: true})
关闭指定类型缓存
使用语句cache.<cacheType>.turnOff()
可以为所有shard服务器关闭指定类型缓存。
关闭操作与服务器配置中的enable_graph_cache
、enable_node_cache
和enable_edge_cache
设置保持一致。请注意,服务器重启后,这些设置会恢复成初始设置。
// 关闭所有图集的所有主副本的图缓存
cache.graph.turnOff()
// 关闭所有图集的所有主副本和从副本的图缓存
cache.graph.turnOff({followers: true})
// 关闭所有图集的所有主副本的点缓存
cache.node.turnOff()
// 关闭所有图集的所有主副本和从副本的点缓存
cache.node.turnOff({followers: true})
// 关闭所有图集的所有主副本的边缓存
cache.edge.turnOff()
// 关闭所有图集的所有主副本和从副本的边缓存
cache.edge.turnOff({followers: true})
预热
使用语句cache.<cacheType>.warmup()
可以将数据从当前图集加载到缓存中。预热操作以作业形式执行,稍后可使用show().job(<id?>)
确认预热是否完成。该操作会消耗内存,且只能在相应类型缓存开启时执行。
// 将图拓朴加载到主副本的缓存中
cache.graph.warmup()
// 将图拓朴加载到主副本和从副本的缓存中
cache.graph.warmup({followers: true})
// 将完成LTE操作的点属性加载到主副本的缓存中
cache.node.warmup()
// 将完成LTE操作的点属性加载到主副本和从副本的缓存中
cache.node.warmup({followers: true})
// 将完成LTE操作的边属性加载到主副本的缓存中
cache.edge.warmup()
// 将完成LTE操作的边属性加载到主副本和从副本的缓存中
cache.edge.warmup({followers: true})
清除缓存
使用语句cache.<cacheType>.clear()
可以清除当前图集的缓存。该操作可以释放内存。
// 清除主副本缓存中的图拓朴 Clears graph topology from cache for the leader replica
cache.graph.clear()
// 清除主副本和从副本缓存中的图拓朴
cache.graph.clear({followers: true})
// 清除主副本缓存中所有完成LTE操作的点属性
cache.node.clear()
// 清除主副本和从副本缓存中所有完成LTE操作的点属性
cache.node.clear({followers: true})
// 清除主副本缓存中所有完成LTE操作的边属性
cache.edge.clear()
// 清除主副本和从副本缓存中所有完成LTE操作的边属性
cache.edge.clear({followers: true})
服务器配置
缓存设置位于每个shard服务器配置文件的ComputeEngine
部分。以下相关项用于控制如何管理不同类型缓存,包括开启或关闭缓存、设置缓存大小和定义逐出策略:
项 |
默认 |
描述 |
---|---|---|
engine_type |
default |
设置引擎类型为default 或speed |
enable_graph_cache |
false |
服务器重启后,是否开启图缓存 |
graph_cache_size |
1024 |
每个图缓存桶的最大大小(单位为MB);仅在default 引擎类型下生效 |
graph_cache_bucket_number |
1024 |
存储图缓存的桶数量;仅在default 引擎类型下生效 |
graph_cache_max_memory_policy |
lru |
最大图缓存内存的逐出策略;仅在default 引擎类型下生效。选项:
|
enable_node_cache |
false |
服务器重启后,是否开启点缓存;仅在default 引擎类型下生效 |
node_cache_size |
1024 |
点缓存的最大大小(单位为MB);仅在default 引擎类型下生效;最大点缓存内存的逐出策略为lru |
enable_edge_cache |
false |
服务器重启后,是否开启边缓存;仅在default 引擎类型下生效 |
edge_cache_size |
1024 |
边缓存的最大大小(单位为MB);仅在default 引擎类型下生效;最大边缓存内存的逐出策略为lru |