# Neo4j备份和优化


<!--more-->


## 1. 备份和恢复

在对Neo4j数据进行备份、还原、迁移的操作时，**首先要关闭neo4j** `./bin/neo4j stop`

- 数据备份到文件

  ```shell
  ./bin/neo4j-admin dump --database=graph.db --to=/root/bak.dump
  ```

- 还原

  ```shell
  ./bin/neo4j-admin load --from=/root/bak.dump --database=graph.db --force
  ```

> 注意，运行数据备份可能会警告
>
> WARNING: Max 1024 open fifiles allowed, minimum of 40000 recommended. See the Neo4j manual
>
>  
>
> 修改文件 `vim /etc/security/limits.conf` 文件最后添加
>
> \*  soft  nofile  65535 
>
> \*  hard  nofile  65535 
>
> 重启服务器

## 2. 调优

### 2.1 增加服务器内存和调整neo4j配置文件

```properties
# java heap 初始值 
dbms.memory.heap.initial_size=1g 
# java heap 最大值，一般不要超过可用物理内存的80％ 
dbms.memory.heap.max_size=16g 
# pagecache大小，官方建议设为：(总内存-dbms.memory.heap.max_size)/2， 
dbms.memory.pagecache.size=2g
```

### 2.2 neo4j启动时数据预热

```cql
MATCH (n) 
OPTIONAL MATCH (n)-[r]->() 
RETURN count(n.name) + count(r);
```

### 2.3 查看执行计划进行索引优化

Cypher查询计划程序将每个查询转换为执行计划。执行计划告诉Neo4j在执行查询时要执行哪些操
作。

对执行计划的生成，Neo4j使用的都是基于成本的优化器（CostBasedOptimizer，CBO），用于制订精确的执行过程。可以采用如下两种不同的方式了解其内部的工作机制：

- EXPLAIN：是解释机制，加入该关键字的Cypher语句可以预览执行的过程但并不实际执行，所以也不会产生任何结果。
- PROFILE：则是画像机制，查询中使用该关键字，不仅能够看到执行计划的详细内容，也可以看到查询的执行结果。

```
关注指标： 
estimated rows： 需要被扫描行数的预估值 
dbhits： 实际运行结果的命中绩效 两个值都是越小越好
```






















