Neo4j-库管理

Neo4j权威指南第五章读书笔记

监控

截图

解释:

  • Store Size: 存储容量, 调用操作系统获取Neo4j数据库存储文件的大小

    前面看过Neo4j数据的存储方式, 节点, 关系, 属性, 大段String, 索引都是分开存放的, 如图所示, 当前总容量是1.4GB

  • IDAllocation: 分配的ID数

  • PageCache 页面缓存 这个为什么木有数

  • Transcations 事务

指标 解释
ArrayStrog 数组存储容量
IndexStore 属性存储容量
LabelStore 标签存储容量
NodeStore Node存储容量
RelationshipStore 关系存储容量
PropertyStore 属性存储容量
Last Tx ID 最后提交的事务ID
Current 当前事务ID
Peak 并发事务的最高峰值
Opened 启动的事务总数
Committed 提交的事务总数

查询管理

开启超时查询保护:

dbms.transcation.timeout = 10s // 默认0表示不启用查询超时保护. 对java API访问时带的超时参数没影响

查询操作query(社区版没找到~~):

dbms.listQueries() 列出运行的语句

dbms.killQuery(queryId)

dbms.killQueries([queryId, queryId, ....])

数据收集器

dbms.udc.enabled=false 关闭数据收集(默认true)

安全管理

社区版的用户没有提供涉及角色、权限控制等安全管理功能。

只提供:

dbms.security.listUsers

dbms.security.showCurrentUsers

dbms.security.changePassword

dbms.security.createUser

dbms.security.deleteUser

运维优化

配置内存

./bin/neo4j-admin memrec 推荐配置

  • 操作系统内存

    操作系统内存 = 可用内存 - (页面缓存 + 堆空间大小)

    index 和 schema 目录需要留出足够的内存用作操作系统的文件缓冲区, 否则索引文件不能完全装载在内存中,影响查询效率, 基本计算方式:

    系统内存 = 1GB + (graph.db/index) + graph.db / schema)

    graph.db 目前我们图数据库大概1.5G

  • 页面缓存大小:

页面缓存用于缓存存储在磁盘上的Neo4j数据, 确保大部分数据缓存到内存中, 提高查询性能

dbms.memory.pagecache.size, 保证数据都能装进去, 再加20%预留

  • 堆大小

堆内存大小足够大对维持并发操作是非常有用的, 一般建议 8~ 16GB之间

dbms.memory.heap.initial_size

dbms.memory.heap.max_size

设置为同一数值(如16000), 以避免不必要的垃圾收集

  • 堆的JVM调优:

    dbms.jvm.additional 附加JVM参数

        #**************************************************************
        # JVM Parameters
        #**********************************************************
        
        # G1GC generally strikes a good balance between throughput and tail
        # latency, without too much tuning.
        dbms.jvm.additional=-XX:+UseG1GC

        # Have common exceptions keep producing stack traces, so they can be
        # debugged regardless of how often logs are rotated.
        dbms.jvm.additional=-XX:-OmitStackTraceInFastThrow
        
        # Make sure that `initmemory` is not only allocated, but committed to
        # the process, before starting the database. This reduces memory
        # fragmentation, increasing the effectiveness of transparent huge
        # pages. It also reduces the possibility of seeing performance drop
        # due to heap-growing GC events, where a decrease in available page
        # cache leads to an increase in mean IO response time.
        # Try reducing the heap memory, if this flag degrades performance.
        dbms.jvm.additional=-XX:+AlwaysPreTouch
        
        # Trust that non-static final fields are really final.
        # This allows more optimizations and improves overall performance.
        # NOTE: Disable this if you use embedded mode, or have extensions or dependencies that may use reflection or
        # serialization to change the value of final fields!
        dbms.jvm.additional=-XX:+UnlockExperimentalVMOptions
        dbms.jvm.additional=-XX:+TrustFinalNonStaticFields
        
        # Disable explicit garbage collection, which is occasionally invoked by the JDK itself.
        dbms.jvm.additional=-XX:+DisableExplicitGC
        dbms.jvm.additional=-Xss100M
        # Disable explicit garbage collection, which is occasionally invoked by the JDK itself.
        dbms.jvm.additional=-XX:+DisableExplicitGC
        dbms.jvm.additional=-Xss100M
        
        # Remote JMX monitoring, uncomment and adjust the following lines as needed. Absolute paths to jmx.access and
        # jmx.password files are required.
        # Also make sure to update the jmx.access and jmx.password files with appropriate permission roles and passwords,
        # the shipped configuration contains only a read only role called 'monitor' with password 'Neo4j'.
        # For more details, see: http://download.oracle.com/javase/8/docs/technotes/guides/management/agent.html
        # On Unix based systems the jmx.password file needs to be owned by the user that will run the server,
        # and have permissions set to 0600.
        # For details on setting these file permissions on Windows see:
        #     http://docs.oracle.com/javase/8/docs/technotes/guides/management/security-windows.html
        #dbms.jvm.additional=-Dcom.sun.management.jmxremote.port=3637
        #dbms.jvm.additional=-Dcom.sun.management.jmxremote.authenticate=true
        #dbms.jvm.additional=-Dcom.sun.management.jmxremote.ssl=false
        #dbms.jvm.additional=-Dcom.sun.management.jmxremote.password.file=/absolute/path/to/conf/jmx.password
        #dbms.jvm.additional=-Dcom.sun.management.jmxremote.access.file=/absolute/path/to/conf/jmx.access
        
        # Some systems cannot discover host name automatically, and need this line configured:
        #dbms.jvm.additional=-Djava.rmi.server.hostname=$THE_NEO4J_SERVER_HOSTNAME
        
        # Expand Diffie Hellman (DH) key size from default 1024 to 2048 for DH-RSA cipher suites used in server TLS handshakes.
        # This is to protect the server from any potential passive eavesdropping.
        dbms.jvm.additional=-Djdk.tls.ephemeralDHKeySize=2048

        # This mitigates a DDoS vector.
        dbms.jvm.additional=-Djdk.tls.rejectClientInitiatedRenegotiation=true

(1) 分配新老两代大小比例:

   -XX:NewRation=N  # 年老代/年轻代 = N, N一般 2~ 8之间 大的年轻代适合更改排序大量数据, 运行并发线程也需要给年轻代更大空间,但年轻代过大容易引起频繁fullGC

(2) 堆的大小:

   最终目的是减少GC时间, 过大的堆会造成一般不GC, 一旦GC会耗费很长时间

(3) 并发垃圾回收:

   -XX:+UseG1GC

系统调优:

Neo4j读写许多读写操作, Linux默认CFQ公平排队调度IO. 期限调度器更适合数据库的特定IO工作负载情况, 优先读操作, 减少读的等待时间, 而增加写的等待时间。

修改驱动器sda:

echo 'deadline' > /sys/block/sda/queue/scheduler

cat  /sys/block/sda/queue/scheduler

磁盘内存:

快速固态硬盘 > 固态硬盘 > 机械硬盘

启动需要预热, 将索引加载到内存: CALL apoc.warmup.run(true);

dstat或vmstat等工具

备份恢复:

企业版提供了备份工具 neo4j-backup 备份到远程或本地, 支持全量, 增量

dbms.backup.enable=true # 默认值就是true
dbms.backup.address=<主机名/IP>:6362

社区版的只好自己写备份脚本了, 直接粘贴复制数据文件也可以, 但是官方建议更安全的数据导入导出工具(停服)

neo4j-admin dump --database=graph.db --to=${file}  # 备份压缩

neo4j-admin load --from=${file_catalog}/${file} --database=graph.db --force  # 恢复数据
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容