暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库【问答集萃】第15期-墨天轮20211101

原创 墨天轮问答平台 2021-11-08
861

上周问答集萃(11月01日-11月07日)

未命名_自定义px_202104260.png

由于目前问答平台问题较多,问答集萃改为每周更新,并同时公布【采纳榜单】及【优秀提问者名单】。

我们定期从墨天轮问答平台上用户遇到的数据库问题中整理出一些常见问题和诊断总结,供大家参考学习,详细的诊断分析过程可以通过点击标题链接查看。

1、Oracle asm磁盘中REDODG磁盘Usable_file_MB值为负值。

解答: 可以,在磁盘组数据平衡分布的情况下,只要free_mb有空间,就可以写入,只不过为负的时候,比如你设置默认normal冗余度,此时损坏一块磁盘,剩余空间无法“再次”满足normal冗余度,此时不会造成数据丢失。

冗余度与失败组设置最终是为了在丢失或损坏几块ASM磁盘,磁盘组数据依然可以保持完整,在不坏盘情况下,free_mb即所有可用空间,usable_file_mb即安全可用空间,即在损坏冗余度允许的磁盘数时,依然可以再次满足normal冗余度。

计算公式如下:

usable_file_mb=(free_mb - require_mirror_free_mb) / 冗余度

#计算的前提可以从下面定义看出,一定是以相应冗余度允许丢失磁盘数进行计算,默认normal冗余度不指定失败组时是以磁盘为单位设置failgroup,如果手工分配了failgroup,则需要以failgroup的大小计算require_mirror_free_mb、usable_file_mb

REQUIRED_MIRROR_FREE_MB

Amount of space that is required to be available in a given disk group in order to restore redundancy after one or more disk failures. The amount of space displayed in this column takes mirroring effects into account.

USABLE_FILE_MB

Amount of free space that can be safely utilized taking mirroring into account and yet be able to restore redundancy after a disk failure(你好我是李白)

2、mysql未提交的事务redolog日志会不会被写进redolog磁盘文件?

解答: 会。脏日志 不是只受 innodb_flush_log_at_trx_commit 这个参数控制

刷日志到磁盘有以下几种规则:

1.发出commit动作时。已经说明过,commit发出后是否刷日志由变量 innodb_flush_log_at_trx_commit 控制。

2.每秒刷一次。这个刷日志的频率由变量 innodb_flush_log_at_timeout 值决定,默认是1秒。要注意,这个刷日志频率和commit动作无关。

3.当log buffer中已经使用的内存超过一半时。

4.当有checkpoint时,checkpoint在一定程度上代表了刷到磁盘时日志所处的LSN位置。

-----只是第一个才和提交相关。其它都和提交无关。(aisql)


3、 Oracle:一套2节点的rac需要迁移到4节点rac,迁移后,需要把ogg从原库也迁移到新库,两端目录,数据库名,用户全部一致,只是节点数不一致。

解答:
如果只有replicat,解压理论上可以。

如果有抽取extract,如果迁移使用rman,由于最终会resetlogs,redo log会被重置,如果是integrated模式,则可以继续抽取,无需干预,如果是classic模式,会由于redo log被重置,无法接续,还需要手工处理。

个人建议:

提前部署好新的ogg,在停机窗口,保障旧ogg全部数据处理完成,直接使用新的继续抽取即可,只要保证数据整个过程中是连续的,无缝衔接即可,重新配置可能更简单许多。(你好我是李白)

4、 在使用Oracle expdp/impdp使用parallel时,需要设置多个dump文件吗?只有一个dump文件会有什么影响?在使用impdp恢复数据时还需要指定相同的paralle吗?

解答: expdp sys/xxx dumpfile=tab%U_20160808.dmp parallel=4 cluster=N

dumpfile 加上%U 会自动生成多个文件,一般一个进程一个文件,一个文件也没有影响,只要导出不报错就行,恢复的时候不需要相同的parallel,如果是RAC环境,使用parallel的同时,建议加上cluster=N(张玉龙)

5、oracle asm磁盘header状态是 former,加入新的磁盘组有影响吗?

解答: MEMBER 表示已经在磁盘组中了,这样的盘是不可在加入到其他磁盘组中的,former 则是可以加入磁盘组中的。(JieKeXu)

GROUP_NUMBER DISK_NUMBER OS_MB/1024 TOTAL_MB/1024 FREE_MB/1024 NAME FAILGROUP PATH FAILGRO HEADER_STATU STATE ------------ ----------- ---------- ------------- ------------ --------------- --------------- ------------------------------ ------- ------------ -------- 1 0 50 50 49.8271484 ACFSDG_0000 ACFSDG_0000 /dev/asm-diskh REGULAR MEMBER NORMAL 2 0 300 300 184.878906 DATA_0000 DATA_0000 /dev/asm-diske REGULAR MEMBER NORMAL 2 3 300 300 184.910156 DATA_0003 DATA_0003 /dev/asm-diskj REGULAR MEMBER NORMAL

6、PL/SQL Developer如何导出表结构和注释?

解答: 一、操作步骤:可在PL/SQL Developer客户端界面操作,首先打开Tools,然后选择Export User Objects,选中表名如下:(每天译点晓知识)
image.png
二、导出效果:
image.png

7、如何判断mysql中的一个表是否存在主键的?

解答: (aisql)

SELECT column_name FROM INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` WHERE table_name='TABLENAME' AND CONSTRAINT_SCHEMA='DBNAME' AND constraint_name='PRIMARY'

8、Oracle 19c中OCR自动备份时存在OCR磁盘中,如果OCR磁盘无法访问那如何重建OCR呢?

解答: 如果是存在本地文件系统 那么可以重建OCR磁盘 然后进行restore操作(徐国奇)

9、Oracle的 生产环境什么情况下取消所有组件?

解答:取消组件的原因是目前现有应用不会使用到这些组件,也可加速数据库创建速度。如果后期需要也可以单独启用。

当然也可以建库时就勾选这些组件,但带来一个问题就是组件带来的安全漏洞问题,生产没用到这些组件,有漏洞问题,就需要补丁或者卸载无用组件,还不如直接安装时就不选这些组件来的方便。(JieKeXu)

10、benchmark跑MySQL,1000仓数据,分别跑了32和100并发,但是发现100并发比32并发还低?

解答: 在官方doc上,对于innodb_thread_concurrency的使用,也给出了一些建议,如下:

  1. 如果一个工作负载中,并发用户线程的数量小于64,建议设置innodb_thread_concurrency=0;

  2. 如果工作负载一直较为严重甚至偶尔达到顶峰,建议先设置innodb_thread_concurrency=128,并通过不断的降低这个参数,96, 80, 64等等,直到发现能够提供最佳性能的线程数,例如,假设系统通常有40到50个用户,但定期的数量增加至60,70,甚至200。你会发现,性能在80个并发用户设置时表现稳定,如果高于这个数,性能反而下降。在这种情况下,建议设置innodb_thread_concurrency参数为80,以避免影响性能。

  3. 如果你不希望InnoDB使用的虚拟CPU数量比用户线程使用的虚拟CPU更多(比如20个虚拟CPU),建议通过设置innodb_thread_concurrency 参数为这个值(也可能更低,这取决于性能体现),如果你的目标是将MySQL与其他应用隔离,你可以考虑绑定mysqld进程到专有的虚拟CPU。但是需 要注意的是,这种绑定,在myslqd进程一直不是很忙的情况下,可能会导致非最优的硬件使用率。在这种情况下,你可能会设置mysqld进程绑定的虚拟 CPU,允许其他应用程序使用虚拟CPU的一部分或全部。

  4. innodb_thread_concurrency设置的过高,可能增加系统内部和资源的争用,可能导致性能倒退。

  5. 在某些情况下,最佳的innodb_thread_concurrency参数设置可以比虚拟CPU的数量小。

  6. 定期检测和分析系统,负载量、用户数或者工作环境的改变可能都需要innodb_thread_concurrency参数的设置进行调整。

innodb_thread_concurrency参数设置的原则,一般等于cpu个数即可,如果不设置的话,当并发量

太高的时候 ,可以会导致mysql 耗尽cpu导致 数据库崩溃!(iPhone Mini)


墨力问答计划正在如火如荼进行中!

成为优秀提问者指南https://www.modb.pro/db/105726
墨力问答计划https://www.modb.pro/db/100800



本期“墨力问答计划”最佳提问者名单

副本_未命名_自定义px_2021092817_30_32.png

序号 1 2 3 4
用户昵称 iPhone Mini 拨开乌云见阳光 徐国奇 沈西含


本期“墨力问答计划”采纳榜单

企业微信截图_20211108094335.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论