CINXE.COM
OB 运维 | OceanBase 单机改三副本:实操手记与深思-腾讯云开发者社区-腾讯云
<!DOCTYPE html><html lang="zh" munual-autotracker-init="" qct-uid="" qct-pv-id="8mw3b1DvyzcuLYK-cl80t" qct-ip="8.222.208.146"><head><meta charSet="UTF-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="format-detection" content="telephone=no"/><title>OB 运维 | OceanBase 单机改三副本:实操手记与深思-腾讯云开发者社区-腾讯云</title><meta name="subject" content="通用技术-数据库开发-数据库,通用技术-开发技术-运维,其他-空类-oceanbase,其他-空类-磁盘,其他-空类-日志"/><meta name="subjectTime" content="2025-02-19 23:35:07"/><meta name="articleSource" content="W"/><meta name="magicSource" content="N"/><meta name="authorType" content="Z,O"/><meta name="productSlug" content="tencentdb-catalog,cdb,clb"/><meta name="keywords" content="数据库,运维,oceanbase,磁盘,日志"/><meta name="description" content="作者:李锡超,苏商银行DBA,负责数据库和中间件运维和建设。擅长 MySQL、Python、Oracle,爱好骑行、技术研究和分享。 "/><meta property="og:title" content="OB 运维 | OceanBase 单机改三副本:实操手记与深思-腾讯云开发者社区-腾讯云"/><meta property="og:description" content="作者:李锡超,苏商银行DBA,负责数据库和中间件运维和建设。擅长 MySQL、Python、Oracle,爱好骑行、技术研究和分享。 "/><meta property="og:image" content="https://cloudcache.tencentcs.com/open_proj/proj_qcloud_v2/gateway/shareicons/cloud.png"/><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, viewport-fit=cover"/><link rel="dns-prefetch" href="//qccommunity.qcloudimg.com"/><link rel="dns-prefetch" href="//ask.qcloudimg.com"/><link rel="dns-prefetch" href="//cloudcache.tencentcs.com"/><link rel="canonical" href="https://cloud.tencent.com/developer/article/2497940"/><meta name="next-head-count" content="20"/><link rel="stylesheet" href="https://imgcache.qq.com/open_proj/proj_qcloud_v2/gateway/portal/css/base.css"/><link rel="stylesheet" href="https://cloudcache.tencentcs.cn/qcloud/ui/cloud-community/build/base/base-202502111512.css"/><style type="text/css"> .rno-markdown p * { white-space: pre-wrap; word-break: break-all; } .tea-overlay { z-index: 99999!important; } </style><link rel="stylesheet" href="https://cloudcache.tencentcs.cn/qcloud/ui/cloud-community/build/Article/Article-202502111516.css"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/katex.min.css"/><link rel="stylesheet" href="https://cloudcache.tencent-cloud.cn/qcloud/draft-master/dist/draft-master-v2.1.2.d4s2ddo9sb.css"/><link rel="stylesheet" href="https://qccommunity-1258344699.cos.ap-guangzhou.myqcloud.com/tc_player/releasev5.1.0/tcplayer.min.css"/><script src="https://tam.cdn-go.cn/aegis-sdk/latest/aegis.min.js"></script><script> if (Aegis) { new Aegis({ id: 'dWlmyFvjDnalkbZO8q', env: 'production', onError: true, pagePerformance: true, reportAssetSpeed: true, api: { reportRequest: true, resHeaders: ['x-req-id'], }, reportApiSpeed: true, beforeRequest: function (data) { // load js failed if (data.logType === 'log') { if (data.logs.level === '32' && data.logs.msg.indexOf('google') > -1) return false; } var ignoreKeys = [ 'Script error', 'chrome-extension', 'qq.com', 'queryWeappQrcodeStatus', 'login/ajax/info', 'woa.com', 'trafficCollect.php', 'google', 'dscache', 'act-api', 'set_qc_cookie', 'opc.cloud.tencent.com', 'uc_gre_ad_buss', 'eb.xcj.pub', 'UCShellJava', '/developer/labs/quick/loader', 'edgeImmersiveReaderDOM', 'sendBeacon', 'error-decoder.html', 'qcloud-community-track.min.js' ]; var alarmMsg = [data.logs.url, data.logs.msg].join('|'); for (var i = 0; i < ignoreKeys.length; i++) { if (alarmMsg.indexOf(ignoreKeys[i]) != -1) return false; } if (/bot|wechatdevtools|spider/i.test(navigator.userAgent)) { return false; } if (location.hostname.indexOf('cloud.tencent.') === -1) { return false; } }, }); } </script><link rel="preload" href="https://qccommunity.qcloudimg.com/community/_next/static/css/15864e0bbdb1e0dc.css" as="style"/><link rel="stylesheet" href="https://qccommunity.qcloudimg.com/community/_next/static/css/15864e0bbdb1e0dc.css" data-n-g=""/><link rel="preload" href="https://qccommunity.qcloudimg.com/community/_next/static/css/76e9fe126c1f99d5.css" as="style"/><link rel="stylesheet" href="https://qccommunity.qcloudimg.com/community/_next/static/css/76e9fe126c1f99d5.css" data-n-p=""/><link rel="preload" href="https://qccommunity.qcloudimg.com/community/_next/static/css/728b1fb8e79e4f53.css" as="style"/><link rel="stylesheet" href="https://qccommunity.qcloudimg.com/community/_next/static/css/728b1fb8e79e4f53.css" data-n-p=""/><link rel="preload" href="https://qccommunity.qcloudimg.com/community/_next/static/css/22022321b3da6a66.css" as="style"/><link rel="stylesheet" href="https://qccommunity.qcloudimg.com/community/_next/static/css/22022321b3da6a66.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/webpack-7d09ebb3ae1839fd.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/framework-bae252e255276064.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/main-b171722e7f1a1add.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/pages/_app-4d4d0038fd3b92af.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/3598-9ce47f9460fcd2e8.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/900-754acf570f26d1b3.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/5711-8b004fba753fc2ae.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/1522-ac3b1777b1c36fd6.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/4031-e3e3905dc88f3f92.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/9142-8d6871ee01ef3752.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/2929-2732ed4070c148cd.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/6213-23c1f09036ef74b2.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/3751-d6902cb0fa3abff0.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/9159-237e4ba66a152bd5.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/4036-6e337191f9b1f6d5.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/1126-c4d27d89bdcaa920.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/432-8c085b26d42596c0.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/2654-a4137ccd8ac059bd.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/856-06c42ea61ae5c3f2.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/9179-8e6d979e9f59fb65.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/4698-c5f3e13cdb54e8e1.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/3886-0966d5b3c6637ede.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/8899-a236cb0292d33b84.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/4989-ab5859ddb53d3104.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/9621-3128a32b4a60c481.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/6508-a902c656e8cf56d8.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/8746-9561bb819ae1b1c5.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/9156-bd0293adce66c497.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/chunks/pages/article/%5BarticleId%5D-82fe8066ebe00e0b.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/mrM2_FDqoCF8ZQFN7PsJr/_buildManifest.js" defer=""></script><script src="https://qccommunity.qcloudimg.com/community/_next/static/mrM2_FDqoCF8ZQFN7PsJr/_ssgManifest.js" defer=""></script></head><body class=""><div id="__next"><script src="https://dscache.tencent-cloud.cn/ecache/qcstat/qcloud/qcloudStatApi.js"></script><script src="https://qccommunity.qcloudimg.com/common/exposure-plugin-4.1.15.min.js"></script><script src="https://qccommunity.qcloudimg.com/community-track/qcloud-community-track.min.js"></script><div class="cdc-responsive-layout" aegis-first-screen-timing="true" qct-area="文章详情页"><div class="cdc-article-page cdc-global"><div class="cdc-sticky-header mod-sticky-header is-hidden" style="left:0"><div id="community-top-sticky-header-product-container"></div><div class="cdc-sticky-header__inner"><div class="cdc-sticky-header__main"><div class="mod-sticky-header__main"><div class="mod-sticky-header__author"><span class="cdc-avatar circle"><a class="cdc-avatar__inner" style="background-image:url(https://developer.qcloudimg.com/http-save/10011/864a60182540ad4dc3f05f841a6b5130.jpg)" href="/developer/user/7053949" target="_blank"></a></span><div class="author-info"><a class="author-info__name" href="/developer/user/7053949" target="_blank"><span class="name-text">爱可生开源社区</span></a></div></div><div class="mod-sticky-header__split"></div><div class="mod-sticky-header__title"><div class="mod-sticky-header__title-content"><h2 class="title-text">OB 运维 | OceanBase 单机改三副本:实操手记与深思</h2></div></div></div></div><div class="cdc-sticky-header__extra"><div class="mod-sticky-header__operates"><button class="cdc-btn mod-sticky-header__operate btn-focus cdc-btn--primary"><i class="add-icon"></i><span>关注作者</span></button></div></div></div></div><div class="cdc-m-guider-banner"><div class="cdc-m-guider-banner__guide-mvp is-detail-page"><div class="cdc-m-guider-banner__guide-mvp-text">前往小程序,Get<em>更优</em>阅读体验!</div><div class="cdc-m-guider-banner__guide-mvp-btn">立即前往</div></div></div><div class="cdc-header cdc-header--block" track="导航"><div class="cdc-header__placeholder"></div><div class="cdc-header__inner"><div id="community-top-header-product-container"></div><div class="cdc-header__top"><div class="cdc-header__top-left"><a href="/?from=20060&from_column=20060" target="_blank" class="cdc-header__top-logo" hotrep="" track="腾讯云官网入口"><i>腾讯云</i></a><div class="cdc-header__top-line"></div><a href="/developer" class="cdc-header__top-logo community"><i>开发者社区</i></a><div class="cdc-header__activity"><div id="cloud-header-product-container"></div></div></div><div class="cdc-header__top-operates"><a href="/document/product?from=20702&from_column=20702" target="_blank" class="cdc-header__link">文档</a><a href="/voc/?from=20703&from_column=20703" target="_blank" class="cdc-header__link">建议反馈</a><a href="https://console.cloud.tencent.com?from=20063&from_column=20063" target="_blank" class="cdc-header__link" track-click="{"areaId":102001,"subAreaId":1}">控制台</a><div class="cdc-header__account"><div class="cdc-header__account-inner"><button class="cdc-btn cdc-header__account-btn cdc-btn--primary">登录/注册</button></div></div></div></div><div class="cdc-header__bottom"><div class="cdc-header__bottom-nav"><a href="/developer" class="cdc-header__bottom-home">首页</a><div class="cdc-header__nav-list"><div class="cdc-header__nav-item">学习</div><div class="cdc-header__nav-item">活动</div><div class="cdc-header__nav-item">专区</div><div class="cdc-header__nav-item">工具</div></div><a href="/tvp?from=20154&from_column=20154" class="cdc-header__tvp" target="_blank">TVP</a><div class="cdc-header__activity"><a class="cdc-header__activity-tit" href="/developer/program/tm" target="_blank">腾讯云架构师技术同盟<div class="cdc-badge"><div class="cdc-badge-inner"><div class="cdc-badge-text"></div></div></div></a></div><div id="community-header-product-container"></div></div><div class="cdc-header__bottom-operates"><div class="cdc-header__search"><div class="cdc-search__wrap"><div class="cdc-search"><span class="cdc-search__text">文章/答案/技术大牛</span><button class="cdc-search__btn">搜索<i class="cdc-search__i search"></i></button></div><div class="cdc-search__dropdown"><div class="cdc-search__bar"><input type="text" class="cdc-search__bar-input" placeholder="文章/答案/技术大牛" value=""/><div class="cdc-search__bar-btns"><button class="cdc-search__btn">搜索<i class="cdc-search__i search"></i></button><button class="cdc-search__btn">关闭<i class="cdc-search__i clear"></i></button></div></div></div></div></div><div class="cdc-header__create"><span class="cdc-header__create-btn not-logged"><span class="cdc-svg-icon-con"><span class="cdc-svg-icon" style="width:16px;height:16px"><svg width="16" height="16" viewBox="0 0 16 16" fill="currentcolor" xmlns="http://www.w3.org/2000/svg"><path d="M14.2466 12.0145C14.1698 13.6258 12.8381 14.9131 11.2129 14.9131H11.1579H4.0927H4.03772C2.4125 14.9131 1.08014 13.6258 1.00334 12.0145H1V11.8668V4.07213V4.04627V3.89922H1.00334C1.08014 2.28732 2.4125 1 4.03772 1H9.6473V1.00069H10.0786L8.7688 2.10773H8.43888H7.7916H6.37904H4.03772C2.97234 2.10773 2.10445 2.9777 2.10445 4.04629V4.41869V4.4472V6.39498V11.4269V11.4309V11.8668C2.10445 12.9354 2.97234 13.8053 4.03772 13.8053H6.37904H8.87153H11.2129C12.2782 13.8053 13.1461 12.9355 13.1461 11.8668V11.466V11.454V9.5181V6.39364L14.2506 5.3051V11.8668V12.0145H14.2466ZM10.4324 7.15226L9.63146 7.99761C9.36577 8.2693 8.69326 8.95104 8.48066 9.17631C8.26726 9.40288 8.09039 9.58901 7.95061 9.73544C7.81079 9.88188 7.72667 9.96597 7.70083 9.98656C7.63321 10.0488 7.55703 10.1144 7.47022 10.1846C7.38412 10.2542 7.29404 10.3099 7.20063 10.3516C7.10722 10.4007 6.97072 10.459 6.79049 10.5305C6.61028 10.6001 6.42213 10.6676 6.22468 10.7339C6.02792 10.8002 5.84109 10.8571 5.66484 10.9061C5.48795 10.9538 5.3561 10.9863 5.2693 11.0009C5.08977 11.0214 4.96988 10.993 4.90956 10.9168C4.84931 10.8405 4.83276 10.7107 4.85924 10.5312C4.87315 10.4331 4.9043 10.292 4.95468 10.1078C5.00431 9.92297 5.05802 9.7315 5.11431 9.53341C5.1713 9.33526 5.22629 9.15179 5.27926 8.98484C5.33297 8.8179 5.37599 8.7026 5.40978 8.64032C5.44953 8.54357 5.49463 8.45413 5.54495 8.37399C5.59465 8.29379 5.66616 8.20503 5.75965 8.10766C5.79934 8.06588 5.89281 7.96649 6.03988 7.81018C6.18624 7.65311 6.80114 7.02774 7.02104 6.79783L7.75117 6.03524L8.56212 5.1899L10.6345 3.02466L12.5214 4.93874L10.4324 7.15226ZM13.816 3.58581C13.7166 3.68987 13.6272 3.78064 13.5483 3.85883C13.4694 3.93703 13.4006 4.0066 13.3423 4.06686C13.276 4.13643 13.2144 4.19738 13.1561 4.24903L11.2785 2.33569C11.3785 2.24025 11.4965 2.12565 11.6336 1.99115C11.7707 1.85668 11.8854 1.75061 11.9761 1.67242C12.0934 1.57708 12.2133 1.51013 12.3385 1.47109C12.4525 1.43529 12.5644 1.41805 12.6751 1.41876H12.7056C12.7665 1.42139 12.8268 1.42729 12.8851 1.43724C12.8838 1.4366 12.8811 1.43724 12.8798 1.4366C12.8811 1.4366 12.8838 1.4366 12.8851 1.43724C13.1376 1.48428 13.4019 1.62009 13.6265 1.83743C13.7511 1.95871 13.8524 2.09382 13.9259 2.23296C14.0346 2.43834 14.0863 2.65304 14.0763 2.8491C14.0763 2.87294 14.0783 2.89748 14.0783 2.92201C14.0783 3.03529 14.0571 3.14789 14.0154 3.26055C13.9737 3.37314 13.9067 3.48185 13.816 3.58581Z" fill="#0052D9"></path></svg></span></span>发布<span class="cdc-svg-icon-con cdc-header__create-btn-arrow"><span class="cdc-svg-icon" style="width:16px;height:16px"><svg width="16" height="16" viewBox="0 0 16 16" fill="currentcolor" xmlns="http://www.w3.org/2000/svg"><path d="M8.16377 4L9.57798 5.41421L14.5277 10.364L13.1135 11.7782L8.1638 6.829L3.21402 11.7782L1.7998 10.364L8.16377 4Z"></path></svg></span></span></span></div></div></div></div></div><div class="cdc-m-sticky-header is-hidden is-sticky"><div class="cdc-m-sticky-header__placeholder"></div><div class="cdc-m-sticky-header__main"><div class="cdc-m-sticky-header__con"><div class="cdc-m-sticky-header__trigger"></div><div class="cdc-m-header-article__menu"><div class="cdc-m-header-article__menu-mask"></div><div class="cdc-m-header-article__menu-side"><div class="cdc-m-header__sidebar"><div class="cdc-m-header__sidebar-top"><i class="cdc-m-header__sidebar-top__logo"></i><span class="cdc-m-header__sidebar-top__back"></span></div><div class="cdc-m-header__sidebar-menus"><a href="/developer" class="cdc-m-header__sidebar-menu link">首页</a><div class="tpm1-collapse"><div class="tpm1-collapse__panel"><header class="tpm1-collapse__panel-hd"><div class="tpm1-collapse__panel-title">学习</div></header></div><div class="tpm1-collapse__panel"><header class="tpm1-collapse__panel-hd"><div class="tpm1-collapse__panel-title">活动</div></header></div><div class="tpm1-collapse__panel"><header class="tpm1-collapse__panel-hd"><div class="tpm1-collapse__panel-title">专区</div></header></div><div class="tpm1-collapse__panel"><header class="tpm1-collapse__panel-hd"><div class="tpm1-collapse__panel-title">工具</div></header></div></div><a href="/tvp?from=20154&from_column=20154" class="cdc-m-header__sidebar-menu link">TVP</a><a class="cdc-m-header__sidebar-activity" href="/developer/program/tm" target="_blank">腾讯云架构师技术同盟<div class="cdc-badge"><div class="cdc-badge-inner"><div class="cdc-badge-text"></div></div></div></a></div><div class="cdc-m-header__sidebar-back"><a href="/?from=20060&from_column=20060" class="cdc-m-header__sidebar-back__link"><i></i><span>返回腾讯云官网</span></a></div></div></div></div><div class="cdc-m-sticky-header__author"><span class="cdc-avatar large circle" style="cursor:unset"><span class="cdc-avatar__inner" style="background-image:url(https://developer.qcloudimg.com/http-save/10011/864a60182540ad4dc3f05f841a6b5130.jpg)"></span></span><div class="cdc-m-sticky-header__author-name">爱可生开源社区</div></div></div><div class="cdc-m-sticky-header__extra"><div class="cdc-m-sticky-header__extra-icon"><i class="extra-search"></i></div><div class="cdc-m-sticky-header__extra-icon"><i class="extra-share"></i></div><div class="cdc-m-sticky-header__extra-operate"><div class="cdc-m-sticky-header__extra-icon"><i class="extra-man"></i></div></div></div></div></div><div class="cdc-m-header-article"><div class="cdc-m-header-article__placeholder"></div><div class="cdc-m-header-article__content"><div class="cdc-m-header-article__main"><div class="cdc-m-header-article__con"><div class="cdc-m-header-article__trigger"></div><div class="cdc-m-header-article__menu"><div class="cdc-m-header-article__menu-mask"></div><div class="cdc-m-header-article__menu-side"><div class="cdc-m-header__sidebar"><div class="cdc-m-header__sidebar-top"><i class="cdc-m-header__sidebar-top__logo"></i><span class="cdc-m-header__sidebar-top__back"></span></div><div class="cdc-m-header__sidebar-menus"><a href="/developer" class="cdc-m-header__sidebar-menu link">首页</a><div class="tpm1-collapse"><div class="tpm1-collapse__panel"><header class="tpm1-collapse__panel-hd"><div class="tpm1-collapse__panel-title">学习</div></header></div><div class="tpm1-collapse__panel"><header class="tpm1-collapse__panel-hd"><div class="tpm1-collapse__panel-title">活动</div></header></div><div class="tpm1-collapse__panel"><header class="tpm1-collapse__panel-hd"><div class="tpm1-collapse__panel-title">专区</div></header></div><div class="tpm1-collapse__panel"><header class="tpm1-collapse__panel-hd"><div class="tpm1-collapse__panel-title">工具</div></header></div></div><a href="/tvp?from=20154&from_column=20154" class="cdc-m-header__sidebar-menu link">TVP</a><a class="cdc-m-header__sidebar-activity" href="/developer/program/tm" target="_blank">腾讯云架构师技术同盟<div class="cdc-badge"><div class="cdc-badge-inner"><div class="cdc-badge-text"></div></div></div></a></div><div class="cdc-m-header__sidebar-back"><a href="/?from=20060&from_column=20060" class="cdc-m-header__sidebar-back__link"><i></i><span>返回腾讯云官网</span></a></div></div></div></div></div><div class="cdc-m-header-article__title"><div class="cdc-m-header-article__title-logo"></div></div><div class="cdc-m-header-article__extra"><div class="cdc-m-header-article__extra-icon"><i class="extra-search"></i></div><div class="cdc-m-header-article__extra-operate"><div class="cdc-m-header-article__extra-icon"><i class="extra-man"></i></div></div></div></div></div></div><div class="cdc-global__main"><div class="cdc-article__body"><div class="cdc-layout"><div class="cdc-layout__main"><div class="cdc-crumb mod-crumb"><div class="cdc-crumb__inner"><a class="cdc-crumb__item" href="/developer">社区首页</a><span class="cdc-crumb__split"> ></span><a class="cdc-crumb__item" href="/developer/column">专栏</a><span class="cdc-crumb__split"> ></span><span class="cdc-crumb__item current">OB 运维 | OceanBase 单机改三副本:实操手记与深思</span></div></div><div class="mod-article-content"><div class="mod-header"><div class="mod-header__top"><div class="mod-header__title"><h1 class="title-text">OB 运维 | OceanBase 单机改三副本:实操手记与深思</h1></div></div><div class="mod-article-source header"><div class="mod-article-source__main"><div class="mod-article-source__avatar"><img src="https://developer.qcloudimg.com/http-save/10011/864a60182540ad4dc3f05f841a6b5130.jpg" alt="作者头像"/></div><div class="mod-article-source__detail"><div class="mod-article-source__name"><span>爱可生开源社区</span></div></div><button class="cdc-btn mod-article-source__operate cdc-btn--primary"><span><i></i>关注</span></button></div></div><div class="mod-header__bottom"><div class="mod-header__detail"><div class="mod-header__date"><span class="date-text">发布<!-- -->于 <!-- -->2025-02-19 23:35:07</span></div><div class="mod-header__date is-mobile"><span class="date-text">发布<!-- -->于 <!-- -->2025-02-19 23:35:07</span></div><div class="mod-header__infos"><div class="cdc-icon__list"><span class="cdc-svg-icon-con"><span class="cdc-svg-icon" style="width:16px;height:16px"><svg width="16" height="16" viewBox="0 0 16 16" fill="currentcolor" xmlns="http://www.w3.org/2000/svg"><g id="icon-view" transform="translate(0.000000, 3.000000)" fill="currentcolor" fill-rule="nonzero"><path d="M15.885,4.68036 C14.9951,3.57569 11.7987,-0.004272 7.99883,-0.004272 C4.19895,-0.004272 1.02302,3.57569 0.112682,4.68036 C0.040058,4.77107 0.000488281,4.88381 0.000488281,5 C0.000488281,5.1162 0.040058,5.22894 0.112682,5.31964 C1.00767,6.42432 4.20407,10.0043 7.99883,10.0043 C11.7936,10.0043 14.9951,6.42432 15.885,5.31964 C15.9576,5.22894 15.9972,5.1162 15.9972,5 C15.9972,4.88381 15.9576,4.77107 15.885,4.68036 Z M7.99883,8.97632 C4.93029,8.97632 2.25555,6.25043 1.17644,4.99745 C2.25555,3.74446 4.95586,1.01857 7.99883,1.01857 C11.0418,1.01857 13.7421,3.74446 14.8314,4.99745 C13.7421,6.25043 11.0418,8.97632 7.99883,8.97632 Z" id="形状"></path><path d="M7.97304,2.55286 C7.49865,2.55286 7.03491,2.69353 6.64046,2.95709 C6.24602,3.22065 5.93859,3.59525 5.75704,4.03354 C5.5755,4.47182 5.528,4.95409 5.62055,5.41937 C5.7131,5.88465 5.94154,6.31203 6.27699,6.64748 C6.61244,6.98293 7.03982,7.21137 7.5051,7.30392 C7.97038,7.39647 8.45265,7.34897 8.89093,7.16743 C9.32922,6.98588 9.70382,6.67845 9.96738,6.28401 C10.2309,5.88956 10.3716,5.42582 10.3716,4.95143 C10.3716,4.31529 10.1189,3.7052 9.66909,3.25538 C9.21927,2.80556 8.60918,2.55286 7.97304,2.55286 Z M7.97304,6.32716 C7.70095,6.32716 7.43496,6.24647 7.20872,6.09531 C6.98249,5.94414 6.80616,5.72928 6.70203,5.4779 C6.59791,5.22652 6.57066,4.94991 6.62374,4.68304 C6.67683,4.41617 6.80785,4.17104 7.00025,3.97864 C7.19265,3.78625 7.43778,3.65522 7.70465,3.60214 C7.97151,3.54905 8.24813,3.5763 8.49951,3.68042 C8.75089,3.78455 8.96575,3.96088 9.11692,4.18712 C9.26808,4.41335 9.34877,4.67934 9.34877,4.95143 C9.35012,5.13295 9.31553,5.31295 9.247,5.48104 C9.17846,5.64913 9.07734,5.802 8.94946,5.93084 C8.82158,6.05967 8.66946,6.16192 8.50188,6.2317 C8.3343,6.30147 8.15457,6.33739 7.97304,6.33739 L7.97304,6.32716 Z" id="形状"></path></g></svg></span><span class="cdc-svg-icon-text">101</span></span><span class="cdc-svg-icon-con is-comment"><span class="cdc-svg-icon" style="width:16px;height:16px"><svg width="16" height="16" viewBox="0 0 16 16" fill="currentcolor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 13.414L5.58594 11H2V3H14V11H10.4141L8 13.414ZM5.17175 12L8 14.8282L10.8282 12H15V2H1V12H5.17175ZM4 6C3.44775 6 3 6.44769 3 7C3 7.55231 3.44775 8 4 8C4.55225 8 5 7.55231 5 7C5 6.44769 4.55225 6 4 6ZM7 7C7 6.44769 7.44775 6 8 6C8.55225 6 9 6.44769 9 7C9 7.55231 8.55225 8 8 8C7.44775 8 7 7.55231 7 7ZM12 6C11.4478 6 11 6.44769 11 7C11 7.55231 11.4478 8 12 8C12.5522 8 13 7.55231 13 7C13 6.44769 12.5522 6 12 6Z"></path></svg></span><span class="cdc-svg-icon-text">0</span></span><span class="cdc-svg-icon-con is-code"><span class="cdc-svg-icon" style="width:16px;height:16px"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M7.34375 14H6L8.44324 3H9.78699L7.34375 14Z" fill="#4B5B76"></path><path d="M16 9.44149L11 13V11.5L15 8.5L11 5.5V4L16 7.55851V9.44149Z" fill="#4B5B76"></path><path d="M1 8.5L5 5.5V4L0 7.55851V9.44149L5 13V11.5L1 8.5Z" fill="#4B5B76"></path></svg></span><span class="cdc-svg-icon-text">0</span></span></div></div><div class="mod-header__tag">代码可运行</div></div><div class="mod-header__operates"><div class="mod-header__operate"><span class="cdc-svg-icon-con is-operate"><span class="cdc-svg-icon" style="width:16px;height:16px"><svg width="16" height="16" viewBox="0 0 16 16" fill="currentcolor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.21101 2.54545C8.80733 1.81818 7.79814 1.81818 7.39446 2.54545L1.94481 12.3636C1.54113 13.0909 2.04573 14 2.85308 14H13.7524C14.5597 14 15.0643 13.0909 14.6607 12.3636L9.21101 2.54545ZM2.85308 12.9091L8.30273 3.09091L13.7524 12.9091H2.85308ZM8.00037 6H9.00037V10H8.00037V6ZM8.00037 11H9.00037V12H8.00037V11Z" fill="currentcolor"></path></svg></span><span class="cdc-svg-icon-text">举报</span></span></div></div></div><div class="mod-header__special"><div class="cdc-special-guide"><span><i class="cdc-special-guide-icon"></i>文章被收录于专栏:</span><a class="cdc-special-guide-name">爱可生开源社区</a></div></div><div class="mod-header__code"><div class="mod-header__code-item"><i class="icon-code"></i>运行总次数:<!-- -->0</div><div class="mod-header__code-tag">代码可运行</div></div></div><div class="mod-content"><div class="mod-content__markdown"><div><div class="rno-markdown new-version rno-"><p>作者:李锡超,苏商银行DBA,负责数据库和中间件运维和建设。擅长 MySQL、Python、Oracle,爱好骑行、技术研究和分享。 </p><p>爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。</p><p>本文约 4500 字,预计阅读需要 15 分钟。</p><figure class=""><hr/></figure><p>近期,在进行 OceanBase 测试时,执行了一次单机转单副本的测试。按照官方文档步骤操作后,发现了不少问题,在此进行总结。</p><h3 id="e5tsq" name="1%E7%A7%9F%E6%88%B7%E6%89%A9%E5%AE%B9"><strong>1租户扩容</strong></h3><p>建议先对 <code>sys</code> 租户进行扩容,这应该是必要步骤,否则扩容后可能是“伪集群”。官方文档似乎遗漏了这一步骤,笔者在后续过程中发现问题,尝试解决时才注意到。</p><p>建议在扩容业务租户前执行以下操作:</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div><div class="rno-markdown-code-toolbar-item is-num"><i class="icon-code"></i><span class="is-m-hidden">代码</span>运行次数:<!-- -->0</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div><button class="rno-markdown-code-toolbar-run"><i class="icon-run"></i><span class="is-m-hidden">Cloud Studio</span> 代码运行</button></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">ALTER RESOURCE POOL sys_pool ZONE_LIST=('zone1','zone2','zone3'); ALTER TENANT sys LOCALITY='F@zone1,F@zone2'; ALTER TENANT sys LOCALITY='F@zone1,F@zone2,F@zone3'; </code></pre></div></div><h3 id="efogq" name="2%E8%A1%A8%E7%9A%84%E5%89%AF%E6%9C%AC%E7%AE%A1%E7%90%86"><strong>2表的副本管理</strong></h3><p>根据测试结果,OceanBase 4.X 版本的表副本管理基本自动化,主要基于租户的 PRIMARY_ZONE 等配置。同时,早期版本中很多关于表副本管理的命令在该版本已被废弃。例如:</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div><div class="rno-markdown-code-toolbar-item is-num"><i class="icon-code"></i><span class="is-m-hidden">代码</span>运行次数:<!-- -->0</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div><button class="rno-markdown-code-toolbar-run"><i class="icon-run"></i><span class="is-m-hidden">Cloud Studio</span> 代码运行</button></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">ALTER TABLE test_t1 set locality = 'F@zone3,F@zone2,F@zone1'; ALTER TABLE test_t1 locality='F,R{all_server}@ZONE1, F,R{all_server}@ZONE2, F,R{all_server}@ZONE3'; </code></pre></div></div><p>执行上述命令时会报错,提示语法错误,需根据 OceanBase 版本查看正确语法。</p><h3 id="e89tu" name="3%E8%A1%A8%E5%89%AF%E6%9C%AC%E5%88%86%E5%B8%83%E5%BC%82%E5%B8%B8%E5%88%86%E6%9E%90"><strong>3表副本分布异常分析</strong></h3><p><strong>本次测试遇到最大问题是 <code>log_disk_size</code> 参数的设置</strong>,导致第一轮测试完全失败,且经过很长时间才找到问题原因。这也是分布式数据库与传统数据库在运维上的典型差异。</p><p>完成租户扩容后,通过以下语句检查表的分布:</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div><div class="rno-markdown-code-toolbar-item is-num"><i class="icon-code"></i><span class="is-m-hidden">代码</span>运行次数:<!-- -->0</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div><button class="rno-markdown-code-toolbar-run"><i class="icon-run"></i><span class="is-m-hidden">Cloud Studio</span> 代码运行</button></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">SELECT tenant_name,database_name, table_name, partition_name, index_name, tablet_id,ls_id,zone,svr_ip,role FROM OCEANBASE.CDB_OB_TABLE_LOCATIONS a join oceanbase.DBA_OB_TENANTS b on a.tenant_id=b.tenant_id WHERE DATABASE_NAME='MYDB' AND TENANT_NAME='mysql_tenant1' order by tenant_name,database_name, table_name, partition_name, zone; SELECT zone,svr_ip,role,count(1) FROM OCEANBASE.CDB_OB_TABLE_LOCATIONS a join oceanbase.DBA_OB_TENANTS b on a.tenant_id=b.tenant_id WHERE DATABASE_NAME='MYDB' AND TENANT_NAME='mysql_tenant1' group by zone,svr_ip,role order by zone; </code></pre></div></div><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://developer.qcloudimg.com/http-save/yehe-7053949/1882e06af5c8d7d9f1d43043e3e29c1f.png" alt="返回结果" style="width:100%"/></div><div class="figure-desc">返回结果</div></div></div></figure><p>返回结果</p><p>根据返回结果可知,无论表是否分区,其 LEADER 都只在 zone1、zone2,在 zone3 上全是 FOLLOWER。</p><p>确认租户 <code>PRIMARY_ZONE='zone1,zone2,zone3'</code> ,并建立大量表和分区后,均未发现问题。尝试通过建表时指定分区/表的位置,发现相关指令只能在老版本中执行。停止 zone2 进行强制切换,发现 zone2 停止后,所有 LEADER 都迁移到了 zone1,zone3 仍然全是 FOLLOWER。</p><p>重新安装 3 节点集群、创建租户并导入测试数据后,问题依旧存在。做如下尝试:</p><ol class="ol-level-0"><li>设置 <code>PRIMARY_ZONE='zone1,zone2,zone3'</code> 不生效,尝试设置 <code>PRIMARY_ZONE=RANDOM</code>,问题未解决。</li><li>再次尝试建立数千个分区,观察分布,问题未解决。</li><li>通过日志跟踪表和分区的创建过程,未看出具体原因,问题未解决。</li><li>查阅资料,检查相关参数,包括 <code>enable_rebalance/enable_transfer</code> 参数,均采用默认值(true),表示会开启自动负载均衡功能。了解到小租户的概念及 LEADER 分布规则,尝试建立多个租户后,问题依旧存在。同时,根据资料提示编写命令尝试切换,但 OceanBase 4.X 中不支持相关语法。</li><li>测试发现 <code>ALTER SYSTEM SWITCH REPLICA</code> 命令无法执行,但 4.X 文档提示支持该语法。根据文档语句生成具体命令:</li></ol><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div><div class="rno-markdown-code-toolbar-item is-num"><i class="icon-code"></i><span class="is-m-hidden">代码</span>运行次数:<!-- -->0</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div><button class="rno-markdown-code-toolbar-run"><i class="icon-run"></i><span class="is-m-hidden">Cloud Studio</span> 代码运行</button></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">ALTER SYSTEM SWITCH REPLICA LEADER LS = 1002 SERVER = '10.0.139.175:2882' TENANT = mysql_tenant1; </code></pre></div></div><p>执行切换后,发现所有表和分区的 LEADER 位于 zone2 的,都切换到了 zone3,说明 zone3 正常,只是由于某种原因无法“承担”表的 LEADER。查看日志流分布的语句为:</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div><div class="rno-markdown-code-toolbar-item is-num"><i class="icon-code"></i><span class="is-m-hidden">代码</span>运行次数:<!-- -->0</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div><button class="rno-markdown-code-toolbar-run"><i class="icon-run"></i><span class="is-m-hidden">Cloud Studio</span> 代码运行</button></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">SELECT a.TENANT_ID,a.LS_ID,a.SVR_IP,a.SVR_PORT,a.ZONE,a.role,b.TENANT_NAME,b.TENANT_TYPE FROM oceanbase.CDB_OB_LS_LOCATIONS a, oceanbase.DBA_OB_TENANTS b WHERE a.TENANT_ID=b.TENANT_ID; </code></pre></div></div><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://developer.qcloudimg.com/http-save/yehe-7053949/b250a1af9c1d51fbc1b46308a754cf8d.png" alt="返回结果" style="width:100%"/></div><div class="figure-desc">返回结果</div></div></div></figure><p>返回结果</p><p>根据返回结果显示,日志流的 LEADER 也只位于 zone1、zone3。</p><h3 id="fk46p" name="4%E6%97%A5%E5%BF%97%E6%B5%81"><strong>4日志流</strong></h3><h4 id="4vl5e" name="4.1-%E6%97%A5%E5%BF%97%E7%AE%A1%E7%90%86"><strong>4.1 日志管理</strong></h4><h5 id="8c835" name="4.1.1-%E6%97%A5%E5%BF%97%E6%B5%81%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86"><strong>4.1.1 日志流工作原理</strong></h5><ol class="ol-level-0"><li>OceanBase 使用日志流(LS、Log Stream)在多副本之间同步状态。每个 Tablet(可理解为一个分区、一个分区索引或一个非分区表)都会对应一个确定的日志流,每个日志流对应多个 Tablet,DML 操作写入 Tablet 的数据所产生的 Redo 日志会持久化在日志流中。日志流的多个副本会分布在不同的可用区中,多个副本之间维持共识算法,选择其中一个副本作为主副本(Leader),其他副本为从副本(Follower)。</li><li>OceanBase 数据库遵循 WAL(write-ahead logging)原则,在事务提交前将 Redo 日志持久化,并使用 Multi-Paxos 协议在多个副本间同步 Redo 日志,即日志流。同一个日志流具有相同的 LSID。</li><li>对于租户 T1 在机器 S1 的所有 Tablet 产生的日志会写入到同一个日志流 LS1,然后 LS1 在机器 S1 将作为 LEADER ,在机器 S2、S3 作为 FOLLOWER。同时,租户 T1 在机器 S2 也有一个日志流 LS2;租户 T1 在机器 S3 也有一个日志流 LS3。</li><li>只有作为 Leader 的日志流,对应机器的 Tablet 才能提供写服务或强一致性读,其它副本只能被动接受日志。</li><li>OceanBase 所有的日志流都对应租户,日志文件存放路径为 <code><data_dir>/clog/tenant_xxxx</code>(xxxx 表示租户 ID),<code>sys</code> 租户对应则为 <code><data_dir>/clog/tenant_1</code>;文件以从 0 开始的编号(一直递增,不重复)进行命名;单个日志文件大小为 64MB。该方式与传统数据库的 Redo 存在明显差异。</li><li><code>sys</code> 租户包括一个 LS,LSID 为 1;各 <code>META$xxxx</code>(xxxx 表示租户 ID)租户包括一个 LS,LSID 为 1;各业务租户包含 N + 1 个 LS(N 表示租户中 Zone 的个数),LSID 分别为 1、1001、1002、...,其中 <code>LSID = 1</code> 对应各租户的内部数据库的 Tablet,如 OceanBase、MySQL,1001 或更高的 LSID 在租户的各个 Zone 各有一个,对应所有业务数据库内的 Tablet。</li></ol><h5 id="3t621" name="4.1.2-%E6%97%A5%E5%BF%97%E5%A4%A7%E5%B0%8F%E7%AE%A1%E7%90%86"><strong>4.1.2 日志大小管理</strong></h5><h6 id="9ct77" name="4.1.2.1-%E9%9B%86%E7%BE%A4%E7%A9%BA%E9%97%B4%E7%AE%A1%E7%90%86%E7%9A%84%E9%85%8D%E7%BD%AE%E9%A1%B9"><strong>4.1.2.1 集群空间管理的配置项</strong></h6><p><strong>log_disk_size</strong></p><ol class="ol-level-0"><li>用于设置 Redo 日志磁盘的大小,即本 OBServer 进程(节点)可以使用的日志盘总空间大小。各个节点可以保持不同 <code>log_disk_size</code> 参数。</li><li>该配置项的值为 0 时,会根据 <code>log_disk_percentage</code> 配置项设置的值分配日志盘空间。</li><li>OBServer 节点启动时,会预分配足够多的日志文件。例如:用户配置 <code>log_disk_size = 100G</code>,那么 OBServer 节点第一次启动时,就会预分配 100G 的日志文件作为日志文件池。</li><li>预分配的路径 <code><data_dir>/clog/log_pool/</code> 下很多 64MB 的文件。</li></ol><p><strong>log_disk_percentage</strong></p><ol class="ol-level-0"><li>用于设置 Redo 日志占用其所在磁盘总空间的百分比。只有 <code>log_disk_size = 0</code> 时,才会根据 <code>log_disk_percentage</code> 配置项设置的值分配日志盘空间;否则 <code>log_disk_percentage</code> 不生效。</li><li>当 <code>log_disk_percentage = 0</code>、<code>log_disk_size = 0</code> 同时满足时,系统会根据日志和数据是否共用同一磁盘来自动计算 Redo 日志占用其所在磁盘总空间的百分比:<ul class="ul-level-1"><li>共用时,Redo 日志占用其所在磁盘总空间的百分比为 30%,即分配磁盘总空间 30% 的日志文件。</li><li>独占时,Redo 日志占用其所在磁盘总空间的百分比为 90%,即分配磁盘总空间 90% 的日志文件。</li></ul></li></ol><h6 id="c58ec" name="4.1.2.2-%E7%A7%9F%E6%88%B7%E7%A9%BA%E9%97%B4%E7%AE%A1%E7%90%86"><strong>4.1.2.2 租户空间管理</strong></h6><ol class="ol-level-0"><li>日志大小通过规格的 <code>log_disk_size</code> 属性指定,最小为 2G(否则规格将创建失败)。当未指定时,<code>log_disk_size</code> 将默认设置为内存的 3 倍大小。</li><li>规格的日志大小包含业务租户和 <code>meta</code> 租户(且相互隔离):其中 <code>meta</code> 租户 = <code>max(log_disk_size * 10%, 512M)</code>,剩余的给业务租户。</li><li>OBServer 节点上创建租户Unit时,会为Unit预留足够多的日志盘空间,如果本地剩余日志盘空间(日志盘可用空间总大小 — 已分配空间)不满足Unit规格要求,则创建租户 <code>Unit</code> 失败。</li><li>每个租户在分配或扩容时,可以通过视图 oceanbase.GV<span>OB_SERVERS 来查询节点总资源和已经分配的资源。确保所有租户的 log_disk_size满足: sum(log_disk_size) <= GV</span></li></ol><h5 id="6onf7" name="4.1.3-%E6%97%A5%E5%BF%97%E7%A9%BA%E9%97%B4%E5%9B%9E%E6%94%B6"><strong>4.1.3 日志空间回收</strong></h5><h6 id="8nooi" name="%E5%9B%9E%E6%94%B6%E6%9D%A1%E4%BB%B6"><strong>回收条件</strong></h6><ol class="ol-level-0"><li>当一个 clog 文件中的所有分区日志对应的数据都已经转储到 SSTable 中时,该 clog 文件就满足了回收条件。</li><li>当租户日志盘使用量超过租户日志盘空间总量乘以 <code>log_disk_utilization_threshold</code> 时,进行日志文件重用。</li><li>当租户日志盘使用量超过租户日志盘空间总量乘以 <code>log_disk_utilization_limit_threshold</code> 时,不再允许日志写入。</li></ol><h6 id="fg1sd" name="%E5%9B%9E%E6%94%B6%E8%BF%87%E7%A8%8B"><strong>回收过程</strong></h6><ol class="ol-level-0"><li>检查与标记:OceanBase 系统会定期检查 clog 文件的回收条件。一旦某个 clog 文件满足回收条件,它就会被标记为可回收。</li><li>日志回放与确认:在回收 Clog 文件之前,系统会确保与该文件相关的所有日志都已经成功回放并持久化到数据文件中。这是通过 Paxos 协议在多个副本间同步日志来实现的。</li><li>删除与重用:一旦确认 Clog 文件不再需要,系统就会将其删除以释放存储空间。同时,为了优化存储空间的使用,OceanBase 还允许在日志文件空间不足时重用旧的日志文件。</li></ol><h4 id="fdip6" name="4.2-%E6%A3%80%E6%9F%A5%E6%97%A5%E5%BF%97%E6%B5%81%E7%8A%B6%E6%80%81"><strong>4.2 检查日志流状态</strong></h4><p>了解日志流原理及与表/分区的关系后,发现表/分区的 LEADER 分布由日志流的 LEADER 分布决定。再次检查表的分布和日志流分布:</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div><div class="rno-markdown-code-toolbar-item is-num"><i class="icon-code"></i><span class="is-m-hidden">代码</span>运行次数:<!-- -->0</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div><button class="rno-markdown-code-toolbar-run"><i class="icon-run"></i><span class="is-m-hidden">Cloud Studio</span> 代码运行</button></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">SELECT a.tenant_id,tenant_name,database_name,ls_id,zone,svr_ip,role,count(1) FROM OCEANBASE.CDB_OB_TABLE_LOCATIONS a join oceanbase.DBA_OB_TENANTS b on a.tenant_id=b.tenant_id group by tenant_name,database_name,ls_id,zone,svr_ip,role order by a.tenant_id,database_name,ls_id; </code></pre></div></div><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://developer.qcloudimg.com/http-save/yehe-7053949/cdd1e11c2f15c41cd1e58840fcd0f4dc.png" alt="" style="width:100%"/></div></div></div></figure><p>发现 <code>meta</code> 租户的日志流 LSID = 1 已正常建立完成,业务租户的 LSID = 1 日志流已正常建立完成,LSID = 1001 已正常建立完成,LSID = 1002 只建立了两个副本,LSID = 1003 无副本。</p><p>通过 <code>CDB_OB_LS</code> 检查日志流的状态,发现日志状态一直处于 CREATING 中:</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div><div class="rno-markdown-code-toolbar-item is-num"><i class="icon-code"></i><span class="is-m-hidden">代码</span>运行次数:<!-- -->0</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div><button class="rno-markdown-code-toolbar-run"><i class="icon-run"></i><span class="is-m-hidden">Cloud Studio</span> 代码运行</button></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">select TENANT_ID,LS_ID,STATUS,PRIMARY_ZONE from oceanbase.CDB_OB_LS; </code></pre></div></div><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://developer.qcloudimg.com/http-save/yehe-7053949/54695dd0c2d657d3dff71dc250f4c4eb.png" alt="" style="width:100%"/></div></div></div></figure><p>该状态表示日志流一直处于“创建中”。那为何会出现该状态呢!</p><h3 id="ab82c" name="5%E9%94%99%E8%AF%AF%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90"><strong>5错误日志分析</strong></h3><h4 id="88jdg" name="5.1-%E9%94%99%E8%AF%AF%E6%97%A5%E5%BF%97%E7%9F%A5%E8%AF%86%E7%82%B9"><strong>5.1 错误日志知识点</strong></h4><ol class="ol-level-0"><li>OceanBase 的日志路径下的 log 目录,默认路径在 <code>/home/admin/oceanbase/log</code>。</li><li>包含 4 个主日志 observer.log、rootservice.log、election.log 和 trace.log,分别对应 observer 日志、RS 日志、选举日志和全链路追踪日志。</li><li>当主日志达到 256M 时,通过 <code>RENAME</code> 为其归档,命名是在后面加上时间戳,比如 <code>observer.log.20240901123456</code>。</li><li>日志格式为:[时间] 日志级别 [所属模块] 函数名(文件:行号) [线程id][线程名][所属租户][trace_id] 日志内容 [(内容相关参数)]。日志从低到高分为:DEBUG、TRACE、INFO、WARN、USER_ERR、ERROR。其中 ERROR 日志比较特殊,会将打日志时所在的堆栈打印出来(需要通过符号表解析)。</li><li>trace_ID:OceanBase 数据库内部的 SQL 级别的 ID,格式为 <code>Y0 - 0000000000000000 - 0 - 0</code>,可以根据找到一条 SQL 的执行过程,是排查问题的重要手段。也可以通过 <code>SELECT last_trace_id();</code> 显示获取 trace_id。</li><li>除了 4 个主日志,还有 observer.log.wf、rootservice.log.wf。该日志包括 WARN 级别或以上的日志。当主日志被归档时,wf 日志也会同时被归档,并保持与主日志相同的时间戳后缀。根据 wf 日志的 trace_id,在主日志找到 SQL 的执行过程;根据时间在主日志找到某一行具体的日志。</li><li>相关参数(略)。</li></ol><h4 id="dt5ra" name="5.2-%E6%A3%80%E6%9F%A5%E6%97%A5%E5%BF%97"><strong>5.2 检查日志</strong></h4><p>检查 wf 日志,发现频繁产生 ERROR 错误:</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div><div class="rno-markdown-code-toolbar-item is-num"><i class="icon-code"></i><span class="is-m-hidden">代码</span>运行次数:<!-- -->0</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div><button class="rno-markdown-code-toolbar-run"><i class="icon-run"></i><span class="is-m-hidden">Cloud Studio</span> 代码运行</button></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">[2024-10-29 00:03:56.112302] ERROR issue_dba_error (ob_Log.cpp:1875)[38115][T1060_L0_G0][T1060][YB420A008BAD-000624C0A09C1A91-0-0] [Lt-17][errcode=4388] Unexpect ed internal error happen, please checkout the internal errcode(errcode=-4264, file="ob_log_service.cpp", Lne_no=b89, info="create_ls failed!!!") </code></pre></div></div><p>根据 wf 日志的 <code>trace_id</code> 在 observer.log 过滤,然后根据时间戳搜索具体的日志行(此处未展示具体日志内容)。</p><p>根据日志,看到 create_ls failed,失败原因是 <code>OB_LOG_OUTOF_DISK_SPACE</code>。进一步发现 PALF(Paxos - base Append - only File System,是 OceanBase 日志同步服务进行打包后的一个框架简称。每个租户的 zone 都有一个 palf,负责对应 zone、租户下的日志的写入和同步服务)模块中返回异常:PalfEnv can not hold more instance,并反馈 <code>log_disk_size</code> 相关参数。</p><p>执行以下 SQL 检查数据库的日志使用情况:</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div><div class="rno-markdown-code-toolbar-item is-num"><i class="icon-code"></i><span class="is-m-hidden">代码</span>运行次数:<!-- -->0</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div><button class="rno-markdown-code-toolbar-run"><i class="icon-run"></i><span class="is-m-hidden">Cloud Studio</span> 代码运行</button></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">select SVR_IP,SVR_PORT,UNIT_ID,TENANT_ID, ceil(LOG_DISK_SIZE/1024/1024) LOG_DISK_SIZE_M,ceil (LOG_DISK_IN_USE/1024/1024) LOG_DISK_IN_USE_M, round(LOG_DISK_IN_USE/LOG_DISK_SIZE*100) LOG_USE_PCT, ceil(DATA_DISK_IN_USE/1024/1024/1024) DATA_DISK_IN_USE_G, STATUS from oceanbase.GV$OB_UNITS order by SVR_IP,TENANT_ID; </code></pre></div></div><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://developer.qcloudimg.com/http-save/yehe-7053949/0804ad747d6eb6ab3e4a37911736e1fd.png" alt="" style="width:100%"/></div></div></div></figure><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div><div class="rno-markdown-code-toolbar-item is-num"><i class="icon-code"></i><span class="is-m-hidden">代码</span>运行次数:<!-- -->0</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div><button class="rno-markdown-code-toolbar-run"><i class="icon-run"></i><span class="is-m-hidden">Cloud Studio</span> 代码运行</button></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">select SVR_IP,ZONE, round(LOG_DISK_CAPACITY/1024/1024/1024) LOG_DISK_CAPACITY_G, round(LOG_DISK_ASSIGNED/1024/1024/1024) LOG_DISK_ASSIGN_G, round(LOG_DISK_ASSIGNED/LOG_DISK_CAPACITY*100) LOG_USE_PCT from oceanbase.GV$OB_SERVERS; </code></pre></div></div><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://developer.qcloudimg.com/http-save/yehe-7053949/137159bf5740f000b2c1f8d847cd82f3.png" alt="" style="width:100%"/></div></div></div></figure><p>根据 OceanBase 日志管理机制和当前使用数据,发现对应的业务租户的使用率偏低,未见异常。</p><p>确认租户创建语句:</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div><div class="rno-markdown-code-toolbar-item is-num"><i class="icon-code"></i><span class="is-m-hidden">代码</span>运行次数:<!-- -->0</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div><button class="rno-markdown-code-toolbar-run"><i class="icon-run"></i><span class="is-m-hidden">Cloud Studio</span> 代码运行</button></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">CREATE RESOURCE UNIT S4_unit_config MEMORY_SIZE = '1536M', MAX_CPU = 1, MIN_CPU = 1, LOG_DISK_SIZE = '2048M', MAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1; CREATE RESOURCE POOL mq_pool_04 UNIT='S4_unit_config', UNIT_NUM=1, ZONE_LIST=('zone1','zone2','zone3'); CREATE TENANT IF NOT EXISTS mysql_tenant4 PRIMARY_ZONE='zone1,zone2,zone3', RESOURCE_POOL_LIST=('mq_pool_04') set OB_TCP_INVITED_NODES='%'; </code></pre></div></div><p>指定了租户的 LOG_DISK_SIZE 为 2GB,结合日志使用情况,OceanBase 对 <code>meta</code> 租户分配了 512MB,业务租户分配了 1536MB。通过官方相关参数规范,满足最小值要求,但创建仍失败。</p><h4 id="aeoks" name="5.3-%E9%92%88%E5%AF%B9-LOG_DISK_SIZE-%E8%BF%9B%E8%A1%8C%E7%A7%9F%E6%88%B7%E5%88%9B%E5%BB%BA%E6%B5%8B%E8%AF%95"><strong>5.3 针对 LOG_DISK_SIZE 进行租户创建测试</strong></h4><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://developer.qcloudimg.com/http-save/yehe-7053949/368247d6292552b9d5ecc5fcf29cdfa3.jpg" alt="" style="width:100%"/></div></div></div></figure><p>根据以上测试结果,发现只有当 LOG_DISK_SIZE 大小必须大于 2560M 时,所有 LS 才会创建成功,否则会创建失败。</p><h4 id="c2kcv" name="5.4-DEBUG-%E5%88%86%E6%9E%90"><strong>5.4 DEBUG 分析</strong></h4><p>根据 observer.log 的日志内容,在 <code>palf_env_impl.cpp/palf_env.cpp</code> 添加断点,然后重复创建租户。跟踪发现租户创建过程中存在如下堆栈:</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div><div class="rno-markdown-code-toolbar-item is-num"><i class="icon-code"></i><span class="is-m-hidden">代码</span>运行次数:<!-- -->0</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div><button class="rno-markdown-code-toolbar-run"><i class="icon-run"></i><span class="is-m-hidden">Cloud Studio</span> 代码运行</button></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">#0 oceanbase::palf::PalfEnvImpl::check_can_create_palf_handle_impl_() const (this=0x7fe7c33fc030) at ./src/logservice/palf/palf_env_impl.cpp:1197 #1 0x00007fe820571e72 in oceanbase::palf::PalfEnvImpl::create_palf_handle_impl_(long, oceanbase::palf::AccessMode const&, oceanbase::palf::PalfBaseInfo const&, oceanbase::palf::LogReplicaType, oceanbase::palf::IPalfHandleImpl*&) (this=0x7fe7c33fc030, palf_id=1001, access_mode=@0x7fe7bb14d2ec: APPEND, palf_base_info=..., replica_type=NORMAL_REPLICA, ipalf_handle_impl=@0x7fe7bb14d0f0: 0x0) at ./src/logservice/palf/palf_env_impl.cpp:416 #2 0x00007fe82056aac1 in oceanbase::palf::PalfEnvImpl::create_palf_handle_impl(long, oceanbase::palf::AccessMode const&, oceanbase::palf::PalfBaseInfo const&, oceanbase::palf::IPalfHandleImpl*&) (this=0x7fe7c33fc030, palf_id=1001, access_mode=@0x7fe7bb14d2ec: APPEND, palf_base_info=..., palf_handle_impl=@0x7fe7bb14d0f0: 0x0) at ./src/logservice/palf/palf_env_impl.cpp:382 #3 0x00007fe82056a91c in oceanbase::palf::PalfEnv::create(long, oceanbase::palf::AccessMode const&, oceanbase::palf::PalfBaseInfo const&, oceanbase::palf::PalfHandle&) ( this=0x7fe7c33fc030, id=1001, access_mode=@0x7fe7bb14d2ec: APPEND, palf_base_info=..., handle=...) at ./src/logservice/palf/palf_env.cpp:110 #4 0x00007fe81f7fd54e in oceanbase::logservice::ObLogService::create_ls_(oceanbase::share::ObLSID const&, oceanbase::common::ObReplicaType const&, oceanbase::share::ObTenantRole const&, oceanbase::palf::PalfBaseInfo const&, bool, oceanbase::logservice::ObLogHandler&, oceanbase::logservice::ObLogRestoreHandler&) (this=0x7fe7a5404030, id=..., replica_type=@0x7fe7bb14d834: REPLICA_TYPE_FULL, tenant_role=..., palf_base_info=..., allow_log_sync=true, log_handler=..., restore_handler=...) at ./src/logservice/ob_log_service.cpp:665 #5 0x00007fe81f7fcdcc in oceanbase::logservice::ObLogService::create_ls(oceanbase::share::ObLSID const&, oceanbase::common::ObReplicaType const&, oceanbase::share::ObTenantRole const&, oceanbase::palf::PalfBaseInfo const&, bool, oceanbase::logservice::ObLogHandler&, oceanbase::logservice::ObLogRestoreHandler&) (this=0x7fe7a5404030, id=..., replica_type=@0x7fe7bb14d834: REPLICA_TYPE_FULL, tenant_role=..., palf_base_info=..., allow_log_sync=true, log_handler=..., restore_handler=...) at ./src/logservice/ob_log_service.cpp:343 #6 0x00007fe828b07498 in oceanbase::storage::ObLS::create_ls(oceanbase::share::ObTenantRole, oceanbase::palf::PalfBaseInfo const&, oceanbase::common::ObReplicaType const&, bool) ( this=0x7fe7996cc150, tenant_role=..., palf_base_info=..., replica_type=@0x7fe7bb14d834: REPLICA_TYPE_FULL, allow_log_sync=true) at ./src/storage/ls/ob_ls.cpp:405 #7 0x00007fe828c79ebf in oceanbase::storage::ObLSService::create_ls(oceanbase::obrpc::ObCreateLSArg const&) (this=0x7fe7909ce030, arg=...) at ./src/storage/tx_storage/ob_ls_service.cpp:508 #8 0x00007fe8232d8c52 in oceanbase::observer::ObRpcCreateLSP::process() (this=0x7fe7bb15a700) at ./src/observer/ob_rpc_processor_simple.cpp:1521 #9 0x00007fe81f601db0 in oceanbase::obrpc::ObRpcProcessorBase::run() (this=0x7fe7bb15a700) at ./deps/oblib/src/rpc/obrpc/ob_rpc_processor_base.cpp:89 #10 0x00007fe822b07e66 in oceanbase::omt::ObWorkerProcessor::process_one(oceanbase::rpc::ObRequest&) (this=0x7fe7775931a8, req=...) at ./src/observer/omt/ob_worker_processor.cpp:88 #11 0x00007fe81f2959d3 in oceanbase::omt::ObWorkerProcessor::process(oceanbase::rpc::ObRequest&) (this=0x7fe7775931a8, req=...) at ./src/observer/omt/ob_worker_processor.cpp:157 #12 0x00007fe822b06d01 in oceanbase::omt::ObThWorker::process_request(oceanbase::rpc::ObRequest&) (this=0x7fe7775930e0, req=...) at ./src/observer/omt/ob_th_worker.cpp:248 #13 0x00007fe81f294a8f in oceanbase::omt::ObThWorker::worker(long&, long&, int&) (this=0x7fe7775930e0, tenant_id=@0x7fe7bb14ec98: 1046, req_recv_timestamp=@0x7fe7bb14ec90: 1729995314847463, worker_level=@0x7fe7bb14ec8c: 0) at ./src/observer/omt/ob_th_worker.cpp:387 #14 0x00007fe822b072bc in oceanbase::omt::ObThWorker::run(long) (this=0x7fe7775930e0, idx=0) at ./src/observer/omt/ob_th_worker.cpp:424 #15 0x00007fe82ea0c271 in oceanbase::lib::Thread::run() (this=0x7fe777593310) at ./deps/oblib/src/lib/thread/thread.cpp:164 #16 0x00007fe82ea0bdae in oceanbase::lib::Thread::__th_start(void*) (arg=0x7fe777593310) at ./deps/oblib/src/lib/thread/thread.cpp:322 #17 0x00007fe819435dc5 in start_thread () from /lib64/libpthread.so.0 #18 0x00007fe81916473d in clone () from /lib64/libc.so.6 </code></pre></div></div><p>在执行 PALF 处理接口创建过程中,需要执行如下检查:</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div><div class="rno-markdown-code-toolbar-item is-num"><i class="icon-code"></i><span class="is-m-hidden">代码</span>运行次数:<!-- -->0</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div><button class="rno-markdown-code-toolbar-run"><i class="icon-run"></i><span class="is-m-hidden">Cloud Studio</span> 代码运行</button></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">bool PalfEnvImpl::check_can_create_palf_handle_impl_() const{ bool bool_ret = true; // 统计Palf处理接口的个数。例如当租户的PRIMARY_ZONE三个zone时,返回3.只有一个zone时,返回1 int64_t count = palf_handle_impl_map_.count(); // 获取磁盘的参数,包括总大小,回收阈值,限制写入阈值等属性。其中log_disk_usage_limit_size_即为当前该租户创建指定的log_disk_size(2048M) - 租户的日志组大小(512M) = 1536M. const PalfDiskOptions disk_opts = disk_options_wrapper_.get_disk_opts_for_recycling_blocks(); // MIN_DISK_SIZE_PER_PALF_INSTANCE源码定义为512M // 计算 (3+1)*512=2048,2048 <= 1536不成立,因此将返回bool_ret为false bool_ret = (count + 1) * MIN_DISK_SIZE_PER_PALF_INSTANCE <= disk_opts.log_disk_usage_limit_size_; return bool_ret; } </code></pre></div></div><p>结合日志流相关原理和实现代码:</p><p>当需要创建一个包含 3 个 zone 的租户时,所需的日志具体数量如下:</p><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://developer.qcloudimg.com/http-save/yehe-7053949/ec813205446a26cc507774b1eb6e9b19.jpg" alt="" style="width:100%"/></div></div></div></figure><p>因此,当租户指定的 PRIMARY_ZONE 为 3 个 zone 时,租户在创建时,需要为业务租户创建 4 个日志流,所需的最小日志流大小:</p><p>(3+1) × 每个 PALF 的最小日志磁盘空间 = 1 × 512MB = 2048M</p><p>由于当前业务租户总的日志大小为总的规格大小 - <code>meta</code> 租户的日志大小为 1536M,小于所需的 2048M,无法满足日志需求检查不通过,LSID=1003 无法创建成功。</p><h3 id="7h8c8" name="6%E6%95%85%E9%9A%9C%E6%80%BB%E7%BB%93%E4%B8%8E%E5%BB%BA%E8%AE%AE"><strong>6故障总结与建议</strong></h3><p>综合以上分析过程,导致本次单机改三副本操作完成后,表的副本无法均分到三个 zone 的根本原因为:租户创建过程中,规格的 <code>log_disk_size</code> 为 2048M,去除 <code>meta</code> 租户的日志大小,业务租户剩余大小为 1536M。租户的 PRIMARY_ZONE 包含 3 个 zone,OceanBase 内部在创建日志流时,需要检查业务租户的日志空间是否满足总的日志大小大于 4×512M,由于无法满足,导致 LSID=1003 的日志流无法创建成功。因此对应的 zone 无法创建表的主副本。</p><h4 id="3nejk" name="%E5%BB%BA%E8%AE%AE"><strong>建议</strong></h4><p>增加规格的 <code>log_disk_size</code> 的大小。如日志空间充足,建议采用默认方式,不指定 <code>log_disk_size</code> 的大小。默认分配为内存的三倍。</p><p>如日志空间有限,<strong>必须满足 >= 租户的 (PRIMARY_ZONE 个数+2)+512M</strong>。</p><p>本文关键字:#OceanBase# #单机版# #日志# #扩容#</p></div></div></div><div class="mod-content__source"><div class="mod-content__source-inner"><div class="mod-content__source-title">本文参与 <a href="/developer/support-plan" target="_blank">腾讯云自媒体同步曝光计划</a>,分享自微信公众号。</div><div class="mod-content__source-desc">原始发表:2025-02-13<!-- -->,如有侵权请联系 <a href="mailto:cloudcommunity@tencent.com">cloudcommunity@tencent.com</a> 删除</div></div><div class="mod-content__source-qr"></div></div><div class="mod-statement-m"><div class="cdc-tag__list mod-content__tags" track-click=""><div class="cdc-tag" track-click="" track-exposure=""><a class="cdc-tag__inner" href="/developer/tag/10244" target="_blank">数据库</a></div><div class="cdc-tag" track-click="" track-exposure=""><a class="cdc-tag__inner" href="/developer/tag/10671" target="_blank">运维</a></div><div class="cdc-tag" track-click="" track-exposure=""><a class="cdc-tag__inner" href="/developer/tag/15009" target="_blank">oceanbase</a></div><div class="cdc-tag" track-click="" track-exposure=""><a class="cdc-tag__inner" href="/developer/tag/17220" target="_blank">磁盘</a></div><div class="cdc-tag" track-click="" track-exposure=""><a class="cdc-tag__inner" href="/developer/tag/17413" target="_blank">日志</a></div></div><div class="mod-content__statement"><p>本文分享自 <span>爱可生开源社区</span> 微信公众号,<span style="color:#0052d9">前往查看</span></p><p>如有侵权,请联系 <a href="mailto:cloudcommunity@tencent.com">cloudcommunity@tencent.com</a> 删除。</p><p class="mod-content__statement-tip">本文参与 <a href="/developer/support-plan" target="_blank">腾讯云自媒体同步曝光计划</a> ,欢迎热爱写作的你一起参与!</p></div></div><div class="cdc-tag__list mod-content__tags" track-click=""><div class="cdc-tag" track-click="" track-exposure=""><a class="cdc-tag__inner" href="/developer/tag/10244" target="_blank">数据库</a></div><div class="cdc-tag" track-click="" track-exposure=""><a class="cdc-tag__inner" href="/developer/tag/10671" target="_blank">运维</a></div><div class="cdc-tag" track-click="" track-exposure=""><a class="cdc-tag__inner" href="/developer/tag/15009" target="_blank">oceanbase</a></div><div class="cdc-tag" track-click="" track-exposure=""><a class="cdc-tag__inner" href="/developer/tag/17220" target="_blank">磁盘</a></div><div class="cdc-tag" track-click="" track-exposure=""><a class="cdc-tag__inner" href="/developer/tag/17413" target="_blank">日志</a></div></div></div></div><div class="mod-article-content is-pill-hidden"><div class="mod-comment"><div class="mod-relevant__title">评论</div><div class="cdc-comment-response"><div class="cdc-comment-response-single-edit not-logged"><div class="cdc-comment-response-single-edit__inner"><span class="cdc-avatar cdc-comment-response-single-edit__avatar cdc-comment__avatar circle"><span class="cdc-avatar__inner" style="background-image:url(https://qcloudimg.tencent-cloud.cn/raw/2eca91c9c29816ff056d22815949d83c.png)" target="_blank"></span></span><div class="cdc-comment-response-single-edit__main"><span>登录</span>后参与评论</div></div></div><div class="cdc-comment-response__toolbar"><div class="cdc-comment-response__number">0<!-- --> 条评论</div><div class="cdc-comment-response__segment"><div class="cdc-comment-response__segment-item is-active">热度</div><div class="cdc-comment-response__segment-item">最新</div></div></div><div class="cdc-comment-response-inner"><div class="cdc-comment-response__body"><div><div class="cdc-loading"><div class="cdc-loading__inner"><div class="cdc-loading__item one"></div><div class="cdc-loading__item two"></div><div class="cdc-loading__item three"></div></div></div></div></div></div><div class="cdc-operate-footer"><div class="cdc-operate-footer__inner"><div class="cdc-operate-footer__toggle is-logout"><div class="cdc-operate-footer__toggle-text"><span>登录 </span>后参与评论</div></div></div></div></div></div></div><div class="mod-article-content recommend"><div class="mod-relevant" qct-area="推荐阅读" qct-exposure=""><div class="mod-relevant__title recommend-read">推荐阅读</div><div class="t-divider t-divider--horizontal" style="margin-bottom:0;margin-top:10px"></div></div></div></div><div class="cdc-layout__side"><div class="cdc-personal-info2 mod-author"><div class="cdc-personal-info2__inner"><div class="cdc-personal-info2__detail"><div class="cdc-personal-info2__main"><div class="cdc-personal-info2__name"><a href="/developer/user/7053949" target="_blank" class="cdc-personal-info2__name-text"></a></div><div class="cdc-personal-info2__level"><div class="cdc-personal-info2__level-number">LV.</div><div class="cdc-emblems cdc-personal-info2__level-emblems"></div></div><div class="cdc-personal-info2__position"></div></div><div class="cdc-personal-info2__avatar"></div></div><div class="cdc-personal-info2__list"><a class="cdc-personal-info2__item" href="/developer/user/undefined/articles" target="_blank"><div class="cdc-personal-info2__item-text">文章</div><div class="cdc-personal-info2__item-number">0</div></a><a class="cdc-personal-info2__item" href="/developer/user/undefined" target="_blank"><div class="cdc-personal-info2__item-text">获赞</div><div class="cdc-personal-info2__item-number">0</div></a></div></div></div><div class="mod-sticky-act"><div class="cdc-directory is-just-commercial"><div class="cdc-directory__wrap"><div class="cdc-directory__inner"><div class="cdc-directory__hd">目录</div><div class="cdc-directory__bd"><div class="cdc-directory__bd-box"><ul class="cdc-directory__list level-2"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-e5tsq">1租户扩容</span></li></ul><ul class="cdc-directory__list level-2"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-efogq">2表的副本管理</span></li></ul><ul class="cdc-directory__list level-2"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-e89tu">3表副本分布异常分析</span></li></ul><ul class="cdc-directory__list level-2"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-fk46p">4日志流</span><ul class="cdc-directory__list level-3"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-4vl5e">4.1 日志管理</span><ul class="cdc-directory__list level-4"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-8c835">4.1.1 日志流工作原理</span></li></ul><ul class="cdc-directory__list level-4"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-3t621">4.1.2 日志大小管理</span></li></ul><ul class="cdc-directory__list level-4"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-6onf7">4.1.3 日志空间回收</span></li></ul></li></ul><ul class="cdc-directory__list level-3"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-fdip6">4.2 检查日志流状态</span></li></ul></li></ul><ul class="cdc-directory__list level-2"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-ab82c">5错误日志分析</span><ul class="cdc-directory__list level-3"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-88jdg">5.1 错误日志知识点</span></li></ul><ul class="cdc-directory__list level-3"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-dt5ra">5.2 检查日志</span></li></ul><ul class="cdc-directory__list level-3"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-aeoks">5.3 针对 LOG_DISK_SIZE 进行租户创建测试</span></li></ul><ul class="cdc-directory__list level-3"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-c2kcv">5.4 DEBUG 分析</span></li></ul></li></ul><ul class="cdc-directory__list level-2"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-7h8c8">6故障总结与建议</span><ul class="cdc-directory__list level-3"><li class="cdc-directory__item"><span class="cdc-directory__target" id="menu-3nejk">建议</span></li></ul></li></ul></div></div></div></div></div><div class="cdc-mod-product2"><div class="cdc-card" qct-exposure="" qct-area="相关产品与服务"><div class="cdc-card__inner"><div class="cdc-card__hd"><div class="cdc-card__title">相关产品与服务</div><div class="cdc-mod-product2-pagination"><span class="pagination-prev disabled"></span><span class="pagination-next "></span></div></div><div class="cdc-card__bd"><div class="cdc-product-info2__list"><div class="cdc-product-info2"><div class="cdc-product-info2__card-main"><div class="cdc-product-info2__card-name">数据库</div><div class="cdc-product-info2__card-desc">云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!</div><div class="cdc-product-info2__card-list"><a target="_blank" href="https://cloud.tencent.com/product/tencentdb-catalog?from=21341&from_column=21341"><i class="product-icon introduce-icon"></i>产品介绍</a></div></div><div class="cdc-product-info2__activity"><a target="_blank" href="https://cloud.tencent.com/act/pro/Featured?from=21344&from_column=21344"><i class="hot-icon"></i>2025春季采购节</a></div></div></div></div></div></div></div></div></div></div></div></div><div class="cdc-widget-global"><div class="cdc-widget-global__btn announcement"></div><div class="cdc-widget-global__btn code"><div class="cdc-widget-global__btn-tag">领券</div></div><div class="cdc-widget-global__btn top" style="visibility:hidden"></div></div><div class="cdc-footer"><div class="cdc-footer__inner"><div class="cdc-footer__main"><div class="cdc-footer__website"><ul class="cdc-footer__website-group"><li class="cdc-footer__website-column"><div class="cdc-footer__website-box"><h3 class="cdc-footer__website-title">社区</h3><ul class="cdc-footer__website-list"><li class="cdc-footer__website-item"><a href="/developer/column">技术文章</a></li><li class="cdc-footer__website-item"><a href="/developer/ask">技术问答</a></li><li class="cdc-footer__website-item"><a href="/developer/salon">技术沙龙</a></li><li class="cdc-footer__website-item"><a href="/developer/video">技术视频</a></li><li class="cdc-footer__website-item"><a href="/developer/learning">学习中心</a></li><li class="cdc-footer__website-item"><a href="/developer/techpedia">技术百科</a></li><li class="cdc-footer__website-item"><a href="/developer/zone/list">技术专区</a></li></ul></div></li><li class="cdc-footer__website-column"><div class="cdc-footer__website-box"><h3 class="cdc-footer__website-title">活动</h3><ul class="cdc-footer__website-list"><li class="cdc-footer__website-item"><a href="/developer/support-plan">自媒体同步曝光计划</a></li><li class="cdc-footer__website-item"><a href="/developer/support-plan-invitation">邀请作者入驻</a></li><li class="cdc-footer__website-item"><a href="/developer/article/1535830">自荐上首页</a></li><li class="cdc-footer__website-item"><a href="/developer/competition">技术竞赛</a></li></ul></div></li><li class="cdc-footer__website-column"><div class="cdc-footer__website-box"><h3 class="cdc-footer__website-title">资源</h3><ul class="cdc-footer__website-list"><li class="cdc-footer__website-item"><a href="/developer/specials">技术周刊</a></li><li class="cdc-footer__website-item"><a href="/developer/tags">社区标签</a></li><li class="cdc-footer__website-item"><a href="/developer/devdocs">开发者手册</a></li><li class="cdc-footer__website-item"><a href="/lab?from=20064&from_column=20064">开发者实验室</a></li></ul></div></li><li class="cdc-footer__website-column"><div class="cdc-footer__website-box"><h3 class="cdc-footer__website-title">关于</h3><ul class="cdc-footer__website-list"><li class="cdc-footer__website-item"><a rel="nofollow" href="/developer/article/1006434">社区规范</a></li><li class="cdc-footer__website-item"><a rel="nofollow" href="/developer/article/1006435">免责声明</a></li><li class="cdc-footer__website-item"><a rel="nofollow" href="mailto:cloudcommunity@tencent.com">联系我们</a></li><li class="cdc-footer__website-item"><a rel="nofollow" href="/developer/friendlink">友情链接</a></li></ul></div></li></ul></div><div class="cdc-footer__qr"><h3 class="cdc-footer__qr-title">腾讯云开发者</h3><div class="cdc-footer__qr-object"><img src="https://qcloudimg.tencent-cloud.cn/raw/a8907230cd5be483497c7e90b061b861.png?imageView2/2/w/76" class="cdc-footer__qr-image" alt="扫码关注腾讯云开发者"/></div><div class="cdc-footer__qr-infos"><p class="cdc-footer__qr-info"><span class="cdc-footer__qr-text">扫码关注腾讯云开发者</span></p><p class="cdc-footer__qr-info"><span class="cdc-footer__qr-text">领取腾讯云代金券</span></p></div></div></div><div class="cdc-footer__recommend"><div class="cdc-footer__recommend-rows"><div class="cdc-footer__recommend-cell"><h3 class="cdc-footer__recommend-title">热门产品</h3><div class="cdc-footer__recommend-wrap"><ul class="cdc-footer__recommend-list"><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="https://dnspod.cloud.tencent.com?from=20064&from_column=20064">域名注册</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/cvm?from=20064&from_column=20064">云服务器</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/tbaas?from=20064&from_column=20064">区块链服务</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/mq?from=20064&from_column=20064">消息队列</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/dsa?from=20064&from_column=20064">网络加速</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/tencentdb-catalog?from=20064&from_column=20064">云数据库</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/cns?from=20064&from_column=20064">域名解析</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/cos?from=20064&from_column=20064">云存储</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/css?from=20064&from_column=20064">视频直播</a></li></ul></div></div><div class="cdc-footer__recommend-cell"><h3 class="cdc-footer__recommend-title">热门推荐</h3><div class="cdc-footer__recommend-wrap"><ul class="cdc-footer__recommend-list"><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/facerecognition?from=20064&from_column=20064">人脸识别</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/tm?from=20064&from_column=20064">腾讯会议</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/act/pro/enterprise2019?from=20064&from_column=20064">企业云</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/cdn-scd?from=20064&from_column=20064">CDN加速</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/trtc?from=20064&from_column=20064">视频通话</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/tiia?from=20064&from_column=20064">图像分析</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/cdb?from=20064&from_column=20064">MySQL 数据库</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/symantecssl?from=20064&from_column=20064">SSL 证书</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/asr?from=20064&from_column=20064">语音识别</a></li></ul></div></div><div class="cdc-footer__recommend-cell"><h3 class="cdc-footer__recommend-title">更多推荐</h3><div class="cdc-footer__recommend-wrap"><ul class="cdc-footer__recommend-list"><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/solution/data_protection?from=20064&from_column=20064">数据安全</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/clb?from=20064&from_column=20064">负载均衡</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/sms?from=20064&from_column=20064">短信</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/ocr?from=20064&from_column=20064">文字识别</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/vod?from=20064&from_column=20064">云点播</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="https://tm.cloud.tencent.com?from=20064&from_column=20064">商标注册</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/solution/la?from=20064&from_column=20064">小程序开发</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/cat?from=20064&from_column=20064">网站监控</a></li><li class="cdc-footer__recommend-item"><a class="com-2-footer-recommend-link" href="/product/cdm?from=20064&from_column=20064">数据迁移</a></li></ul></div></div></div></div><div class="cdc-footer__copyright"><div class="cdc-footer__copyright-text"><p>Copyright © 2013 - <!-- -->2025<!-- --> Tencent Cloud. All Rights Reserved. 腾讯云 版权所有 </p><p>深圳市腾讯计算机系统有限公司 ICP备案/许可证号:<a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">粤B2-20090059 </a><a href="https://www.beian.gov.cn/portal/index.do" target="_blank">深公网安备号 44030502008569</a></p><p>腾讯云计算(北京)有限责任公司 京ICP证150476号 | <a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">京ICP备11018762号</a> <!-- -->|<!-- --> <a href="https://www.beian.gov.cn/portal/index.do" target="_blank">京公网安备号11010802020287</a></p></div></div></div></div><div style="display:none"><a href="/developer/ask/archives.html">问题归档</a><a href="/developer/column/archives.html">专栏文章</a><a href="/developer/news/archives.html">快讯文章归档</a><a href="/developer/information/all.html">关键词归档</a><a href="/developer/devdocs/archives.html">开发者手册归档</a><a href="/developer/devdocs/sections_p1.html">开发者手册 Section 归档</a></div><div class="cdc-m-footer"><div class="cdc-m-footer__inner"><div class="cdc-m-footer__copyright"><p>Copyright © 2013 - <!-- -->2025<!-- --> Tencent Cloud.</p><p>All Rights Reserved. 腾讯云 版权所有</p></div></div></div><div class="cdc-operate-footer"><div class="cdc-operate-footer__inner"><div class="cdc-operate-footer__toggle is-logout"><div class="cdc-operate-footer__toggle-text"><span>登录 </span>后参与评论</div></div><div class="cdc-operate-footer__operations"><div class="cdc-operate-footer__operate"><i class="cdc-operate-footer__operate-icon comment"></i></div><div class="cdc-operate-footer__operate emoji"><div class="emoji-item"><span class="emoji-item-icon fight"></span></div></div><div class="cdc-operate-footer__operate"><i class="cdc-operate-footer__operate-icon book"></i></div><div class="cdc-operate-footer__operate"><i class="cdc-operate-footer__operate-icon menu"></i></div><div class="cdc-operate-footer__operate"><i class="cdc-operate-footer__operate-icon more"></i></div></div></div></div><div class="cdc-suspend-pill"><div class="cdc-suspend-pill__inner"><button class="cdc-icon-btn cdc-suspend-pill__item emoji cdc-icon-btn--text"><div class="emoji-item"><span class="emoji-item-icon fight"></span></div><span class="cdc-suspend-pill__item-number">0</span></button><button class="cdc-icon-btn cdc-suspend-pill__item like cdc-icon-btn--text"><span class="cdc-svg-icon-con"><span class="cdc-svg-icon" style="width:24px;height:24px"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentcolor"><path fill-rule="evenodd" clip-rule="evenodd" d="M17.5 11.25C17.5 11.9404 16.9404 12.5 16.25 12.5C15.5596 12.5 15 11.9404 15 11.25C15 10.5596 15.5596 10 16.25 10C16.9404 10 17.5 10.5596 17.5 11.25Z M12.25 12.5C12.9404 12.5 13.5 11.9404 13.5 11.25C13.5 10.5596 12.9404 10 12.25 10C11.5596 10 11 10.5596 11 11.25C11 11.9404 11.5596 12.5 12.25 12.5Z M8.25 12.5C8.94036 12.5 9.5 11.9404 9.5 11.25C9.5 10.5596 8.94036 10 8.25 10C7.55964 10 7 10.5596 7 11.25C7 11.9404 7.55964 12.5 8.25 12.5Z M5 3C3.34315 3 2 4.34315 2 6V16C2 17.6569 3.34315 19 5 19H8.34311L10.5858 21.2426C11.3668 22.0237 12.6331 22.0237 13.4142 21.2426L15.6568 19H19C20.6569 19 22 17.6569 22 16V6C22 4.34315 20.6569 3 19 3H5ZM4 6C4 5.44772 4.44772 5 5 5H19C19.5523 5 20 5.44772 20 6V16C20 16.5523 19.5523 17 19 17H14.8284L12 19.8284L9.17154 17H5C4.44772 17 4 16.5523 4 16V6Z"></path></svg></span></span><span class="cdc-suspend-pill__item-number">0</span></button><button class="cdc-icon-btn cdc-suspend-pill__item collect cdc-icon-btn--text" qct-area="收藏文章" qct-click=""><span class="cdc-svg-icon-con"><span class="cdc-svg-icon" style="width:24px;height:24px"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentcolor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.2057 3.11487C10.9393 1.62838 13.059 1.62838 13.7927 3.11487L15.9724 7.53141L20.8463 8.23963C22.4867 8.478 23.1418 10.4939 21.9547 11.651L18.4279 15.0888L19.2605 19.9431C19.5407 21.5769 17.8258 22.8228 16.3586 22.0514L11.9992 19.7596L7.63981 22.0514C6.17255 22.8228 4.45769 21.5769 4.73791 19.9431L5.57048 15.0888L2.04366 11.651C0.856629 10.4939 1.51165 8.478 3.15209 8.23963L8.02603 7.53141L10.2057 3.11487ZM11.9992 4L9.8195 8.41654C9.52818 9.00683 8.96504 9.41597 8.31363 9.51062L3.43969 10.2188L6.9665 13.6566C7.43787 14.1161 7.65297 14.7781 7.5417 15.4269L6.70913 20.2812L11.0685 17.9893C11.6512 17.683 12.3472 17.683 12.9299 17.9893L17.2893 20.2812L16.4567 15.4269C16.3454 14.7781 16.5605 14.1161 17.0319 13.6566L20.5587 10.2188L15.6848 9.51062C15.0333 9.41597 14.4702 9.00683 14.1789 8.41654L11.9992 4Z"></path></svg></span></span><span class="cdc-suspend-pill__item-number">0</span></button><button class="cdc-icon-btn cdc-suspend-pill__item cdc-icon-btn--text"><span class="cdc-svg-icon-con"><span class="cdc-svg-icon" style="width:24px;height:24px"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentcolor" xmlns="http://www.w3.org/2000/svg"><path d="M13.0001 4V6H17.5859L10.1787 13.4072L11.6043 14.81L19.0001 7.41424V12H21.0001V4H13.0001Z"></path><path d="M3 12.9996C3 8.71646 5.99202 5.13211 10 4.22266V6.28952C7.10851 7.15007 5 9.82862 5 12.9996C5 16.8656 8.13401 19.9996 12 19.9996C15.1709 19.9996 17.8494 17.8912 18.71 14.9999H20.7769C19.8674 19.0077 16.2831 21.9996 12 21.9996C7.02944 21.9996 3 17.9702 3 12.9996Z"></path></svg></span></span></button><button class="cdc-icon-btn cdc-suspend-pill__item cdc-icon-btn--text"><span class="cdc-svg-icon-con"><span class="cdc-svg-icon" style="width:24px;height:24px"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentcolor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M2 6C2 4.34315 3.34315 3 5 3H17C18.6569 3 20 4.34315 20 6V11H18V6C18 5.44772 17.5523 5 17 5H5C4.44772 5 4 5.44772 4 6V18C4 18.5523 4.44772 19 5 19H12V21H5C3.34315 21 2 19.6569 2 18V6ZM6 8H12V10H6V8ZM6 12H15V14H6V12ZM22 16H19V13H17V16H14V18H17V21H19V18H22V16Z"></path></svg></span></span></button><div class="cdc-suspend-pill__line"></div><button class="cdc-icon-btn cdc-suspend-pill__item cdc-icon-btn--text"><span class="cdc-svg-icon-con"><span class="cdc-svg-icon" style="width:24px;height:24px"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentcolor" xmlns="http://www.w3.org/2000/svg"><path d="M16.5047 6H13V4H20V10.876H18V7.33313L14.4571 10.876L13.0429 9.46182L16.5047 6Z"></path><path d="M11 6.00006H7.4953L10.9571 9.46189L9.54291 10.8761L6 7.33319V10.8761H4V4.00006H11V6.00006Z"></path><path d="M7.4953 18.8761H11V20.8761H4V14.0001H6V17.543L9.54291 14.0001L10.9571 15.4143L7.4953 18.8761Z"></path><path d="M16.5047 18.8761H13V20.8761H20V14.0001H18V17.543L14.4571 14.0001L13.0429 15.4143L16.5047 18.8761Z"></path></svg></span></span></button><button class="cdc-icon-btn cdc-suspend-pill__item recommend cdc-icon-btn--text" track-click="{"areaId":106019,"recPolicyId":1002,"elementId":2}" track-exposure="{"areaId":106019,"recPolicyId":1002,"elementId":2}"><span class="cdc-svg-icon-con"><span class="cdc-svg-icon" style="width:24px;height:24px"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentcolor" xmlns="http://www.w3.org/2000/svg"><path d="M5 8H10V10H5V8Z"></path><path d="M10 12H5V14H10V12Z"></path><path d="M14 8H19V10H14V8Z"></path><path d="M19 12H14V14H19V12Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M11 20.608L9.57047 20.1996C8.83303 19.9889 8.05701 19.9506 7.30243 20.0878L4.35777 20.6232C3.13009 20.8464 2 19.9033 2 18.6555V5.2669C2 4.2325 2.78877 3.36877 3.81893 3.27512L6.52892 3.02875C7.95704 2.89892 9.39058 3.21084 10.6356 3.9223L12 4.70194L13.3644 3.9223C14.6094 3.21084 16.043 2.89892 17.4711 3.02875L20.1811 3.27512C21.2112 3.36877 22 4.2325 22 5.2669V18.6555C22 19.9033 20.8699 20.8464 19.6422 20.6232L16.6976 20.0878C15.943 19.9506 15.167 19.9889 14.4295 20.1996L13 20.608L12.5 20.8535L12 20.8937L11.5 20.8535L11 20.608ZM6.70999 5.02054C7.73007 4.9278 8.75403 5.1506 9.64336 5.65879L11 6.43401V18.528L10.1199 18.2765C9.0875 17.9815 8.00107 17.928 6.94466 18.1201L4 18.6555V5.2669L6.70999 5.02054ZM13 18.528L13.8801 18.2765C14.9125 17.9815 15.9989 17.928 17.0553 18.1201L20 18.6555V5.2669L17.29 5.02054C16.2699 4.9278 15.246 5.1506 14.3566 5.65879L13 6.43401V18.528Z"></path></svg></span></span><span class="cdc-suspend-pill__item-text">推荐</span></button></div></div></div></div></div><script> if (!String.prototype.replaceAll) { String.prototype.replaceAll = function (str, newStr) { // If a regex pattern if (Object.prototype.toString.call(str).toLowerCase() === '[object regexp]') { return this.replace(str, newStr); } // If a string return this.replace(new RegExp(str, 'g'), newStr); }; } </script><script src="https://developer.qcloudimg.com/static/jquery.min.js"></script><script src="https://cloud.tencent.com/qccomponent/login/api.js"></script><script src="https://cloudcache.tencent-cloud.com/qcloud/main/scripts/release/common/vendors/react/react.16.8.6.min.js"></script><script src="https://qccommunity-1258344699.cos.ap-guangzhou.myqcloud.com/tc_player/releasev5.1.0/libs/TXLivePlayer-1.3.5.min.js" defer=""></script><script src="https://qccommunity-1258344699.cos.ap-guangzhou.myqcloud.com/tc_player/releasev5.1.0/libs/hls.min.1.1.7.js"></script><script src="https://qccommunity-1258344699.cos.ap-guangzhou.myqcloud.com/tc_player/releasev5.1.0/tcplayer.v5.1.0.min.js"></script><script id="__NEXT_DATA__" type="application/json">{"props":{"isMobile":false,"isSupportWebp":false,"currentDomain":"cloud.tencent.com","baseUrl":"https://cloud.tencent.com","reqId":"8mw3b1DvyzcuLYK-cl80t","query":{"articleId":"2497940"},"platform":"other","env":"production","__N_SSP":true,"pageProps":{"fallback":{"#url:\"/api/article/detail\",params:#articleId:2497940,,":{"articleData":{"articleId":2497940,"codeLineNum":106,"readingTime":1352,"wordsNum":6196},"articleInfo":{"articleId":2497940,"channel":4,"commentNum":0,"content":{"blocks":[{"key":"6okbv","text":"作者:李锡超,苏商银行DBA,负责数据库和中间件运维和建设。擅长 MySQL、Python、Oracle,爱好骑行、技术研究和分享。\n","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"5qtid","text":"爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"fc0g1","text":"本文约 4500 字,预计阅读需要 15 分钟。","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"6nh9n","text":"----","type":"atomic","depth":0,"inlineStyleRanges":[],"entityRanges":[{"offset":0,"length":4,"key":0}],"data":{}},{"key":"dd4oe","text":"近期,在进行 OceanBase 测试时,执行了一次单机转单副本的测试。按照官方文档步骤操作后,发现了不少问题,在此进行总结。","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"e5tsq","text":"1租户扩容","type":"header-two","depth":0,"inlineStyleRanges":[{"offset":0,"length":5,"style":"BOLD"}],"entityRanges":[],"data":{"text":"1%E7%A7%9F%E6%88%B7%E6%89%A9%E5%AE%B9"}},{"key":"bkmdb","text":"建议先对 sys 租户进行扩容,这应该是必要步骤,否则扩容后可能是“伪集群”。官方文档似乎遗漏了这一步骤,笔者在后续过程中发现问题,尝试解决时才注意到。","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":5,"length":3,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"9unjn","text":"建议在扩容业务租户前执行以下操作:","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"f30s9","text":"ALTER RESOURCE POOL sys_pool ZONE_LIST=('zone1','zone2','zone3');\nALTER TENANT sys LOCALITY='F@zone1,F@zone2';\nALTER TENANT sys LOCALITY='F@zone1,F@zone2,F@zone3';\n","type":"code-block","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{"syntax":"javascript"}},{"key":"efogq","text":"2表的副本管理","type":"header-two","depth":0,"inlineStyleRanges":[{"offset":0,"length":7,"style":"BOLD"}],"entityRanges":[],"data":{"text":"2%E8%A1%A8%E7%9A%84%E5%89%AF%E6%9C%AC%E7%AE%A1%E7%90%86"}},{"key":"51arf","text":"根据测试结果,OceanBase 4.X 版本的表副本管理基本自动化,主要基于租户的 PRIMARY_ZONE 等配置。同时,早期版本中很多关于表副本管理的命令在该版本已被废弃。例如:","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"8lak2","text":"ALTER TABLE test_t1 set locality = 'F@zone3,F@zone2,F@zone1';\nALTER TABLE test_t1 locality='F,R{all_server}@ZONE1, F,R{all_server}@ZONE2, F,R{all_server}@ZONE3';\n","type":"code-block","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{"syntax":"javascript"}},{"key":"dq7bc","text":"执行上述命令时会报错,提示语法错误,需根据 OceanBase 版本查看正确语法。","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"e89tu","text":"3表副本分布异常分析","type":"header-two","depth":0,"inlineStyleRanges":[{"offset":0,"length":10,"style":"BOLD"}],"entityRanges":[],"data":{"text":"3%E8%A1%A8%E5%89%AF%E6%9C%AC%E5%88%86%E5%B8%83%E5%BC%82%E5%B8%B8%E5%88%86%E6%9E%90"}},{"key":"epmm7","text":"本次测试遇到最大问题是 log_disk_size 参数的设置,导致第一轮测试完全失败,且经过很长时间才找到问题原因。这也是分布式数据库与传统数据库在运维上的典型差异。","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":31,"style":"BOLD"},{"offset":12,"length":13,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"3tbhg","text":"完成租户扩容后,通过以下语句检查表的分布:","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"54cgf","text":"SELECT tenant_name,database_name, table_name, partition_name, index_name, tablet_id,ls_id,zone,svr_ip,role\nFROM OCEANBASE.CDB_OB_TABLE_LOCATIONS a join oceanbase.DBA_OB_TENANTS b\non a.tenant_id=b.tenant_id\nWHERE DATABASE_NAME='MYDB' AND TENANT_NAME='mysql_tenant1'\norder by tenant_name,database_name, table_name, partition_name, zone;\n\nSELECT zone,svr_ip,role,count(1)\nFROM OCEANBASE.CDB_OB_TABLE_LOCATIONS a join oceanbase.DBA_OB_TENANTS b\non a.tenant_id=b.tenant_id\nWHERE DATABASE_NAME='MYDB' AND TENANT_NAME='mysql_tenant1'\ngroup by zone,svr_ip,role\norder by zone;\n","type":"code-block","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{"syntax":"javascript"}},{"key":"bohdp","text":"\ud83d","type":"atomic","depth":0,"inlineStyleRanges":[],"entityRanges":[{"offset":0,"length":1,"key":1}],"data":{}},{"key":"fdmsc","text":"返回结果","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"d1q8r","text":"根据返回结果可知,无论表是否分区,其 LEADER 都只在 zone1、zone2,在 zone3 上全是 FOLLOWER。","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"5801a","text":"确认租户 PRIMARY_ZONE='zone1,zone2,zone3' ,并建立大量表和分区后,均未发现问题。尝试通过建表时指定分区/表的位置,发现相关指令只能在老版本中执行。停止 zone2 进行强制切换,发现 zone2 停止后,所有 LEADER 都迁移到了 zone1,zone3 仍然全是 FOLLOWER。","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":5,"length":32,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"20q1p","text":"重新安装 3 节点集群、创建租户并导入测试数据后,问题依旧存在。做如下尝试:","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"ec2kg","text":"设置 PRIMARY_ZONE='zone1,zone2,zone3' 不生效,尝试设置 PRIMARY_ZONE=RANDOM,问题未解决。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":3,"length":32,"style":"CODE"},{"offset":45,"length":19,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"1d5hg","text":"再次尝试建立数千个分区,观察分布,问题未解决。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"2p3lt","text":"通过日志跟踪表和分区的创建过程,未看出具体原因,问题未解决。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"4f5f6","text":"查阅资料,检查相关参数,包括 enable_rebalance/enable_transfer 参数,均采用默认值(true),表示会开启自动负载均衡功能。了解到小租户的概念及 LEADER 分布规则,尝试建立多个租户后,问题依旧存在。同时,根据资料提示编写命令尝试切换,但 OceanBase 4.X 中不支持相关语法。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":15,"length":32,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"o7bm","text":"测试发现 ALTER SYSTEM SWITCH REPLICA 命令无法执行,但 4.X 文档提示支持该语法。根据文档语句生成具体命令:","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":5,"length":27,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"dk7c9","text":"ALTER SYSTEM SWITCH REPLICA LEADER LS = 1002 SERVER = '10.0.139.175:2882' TENANT = mysql_tenant1;\n","type":"code-block","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{"syntax":"javascript"}},{"key":"eeko4","text":"执行切换后,发现所有表和分区的 LEADER 位于 zone2 的,都切换到了 zone3,说明 zone3 正常,只是由于某种原因无法“承担”表的 LEADER。查看日志流分布的语句为:","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"ehc0l","text":"SELECT a.TENANT_ID,a.LS_ID,a.SVR_IP,a.SVR_PORT,a.ZONE,a.role,b.TENANT_NAME,b.TENANT_TYPE FROM oceanbase.CDB_OB_LS_LOCATIONS a, oceanbase.DBA_OB_TENANTS b WHERE a.TENANT_ID=b.TENANT_ID;\n","type":"code-block","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{"syntax":"javascript"}},{"key":"77cms","text":"\ud83d","type":"atomic","depth":0,"inlineStyleRanges":[],"entityRanges":[{"offset":0,"length":1,"key":2}],"data":{}},{"key":"77f13","text":"返回结果","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"9fnkb","text":"根据返回结果显示,日志流的 LEADER 也只位于 zone1、zone3。","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"fk46p","text":"4日志流","type":"header-two","depth":0,"inlineStyleRanges":[{"offset":0,"length":4,"style":"BOLD"}],"entityRanges":[],"data":{"text":"4%E6%97%A5%E5%BF%97%E6%B5%81"}},{"key":"4vl5e","text":"4.1 日志管理","type":"header-three","depth":0,"inlineStyleRanges":[{"offset":0,"length":8,"style":"BOLD"}],"entityRanges":[],"data":{"text":"4.1-%E6%97%A5%E5%BF%97%E7%AE%A1%E7%90%86"}},{"key":"8c835","text":"4.1.1 日志流工作原理","type":"header-four","depth":0,"inlineStyleRanges":[{"offset":0,"length":13,"style":"BOLD"}],"entityRanges":[],"data":{"text":"4.1.1-%E6%97%A5%E5%BF%97%E6%B5%81%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86"}},{"key":"8hcil","text":"OceanBase 使用日志流(LS、Log Stream)在多副本之间同步状态。每个 Tablet(可理解为一个分区、一个分区索引或一个非分区表)都会对应一个确定的日志流,每个日志流对应多个 Tablet,DML 操作写入 Tablet 的数据所产生的 Redo 日志会持久化在日志流中。日志流的多个副本会分布在不同的可用区中,多个副本之间维持共识算法,选择其中一个副本作为主副本(Leader),其他副本为从副本(Follower)。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"9j4gt","text":"OceanBase 数据库遵循 WAL(write-ahead logging)原则,在事务提交前将 Redo 日志持久化,并使用 Multi-Paxos 协议在多个副本间同步 Redo 日志,即日志流。同一个日志流具有相同的 LSID。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"7hvou","text":"对于租户 T1 在机器 S1 的所有 Tablet 产生的日志会写入到同一个日志流 LS1,然后 LS1 在机器 S1 将作为 LEADER ,在机器 S2、S3 作为 FOLLOWER。同时,租户 T1 在机器 S2 也有一个日志流 LS2;租户 T1 在机器 S3 也有一个日志流 LS3。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"fjgrq","text":"只有作为 Leader 的日志流,对应机器的 Tablet 才能提供写服务或强一致性读,其它副本只能被动接受日志。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"96qac","text":"OceanBase 所有的日志流都对应租户,日志文件存放路径为 \u003cdata_dir\u003e/clog/tenant_xxxx(xxxx 表示租户 ID),sys 租户对应则为 \u003cdata_dir\u003e/clog/tenant_1;文件以从 0 开始的编号(一直递增,不重复)进行命名;单个日志文件大小为 64MB。该方式与传统数据库的 Redo 存在明显差异。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":32,"length":27,"style":"CODE"},{"offset":74,"length":3,"style":"CODE"},{"offset":85,"length":24,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"420mi","text":"sys 租户包括一个 LS,LSID 为 1;各 META$xxxx(xxxx 表示租户 ID)租户包括一个 LS,LSID 为 1;各业务租户包含 N + 1 个 LS(N 表示租户中 Zone 的个数),LSID 分别为 1、1001、1002、...,其中 LSID = 1 对应各租户的内部数据库的 Tablet,如 OceanBase、MySQL,1001 或更高的 LSID 在租户的各个 Zone 各有一个,对应所有业务数据库内的 Tablet。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":0,"length":3,"style":"CODE"},{"offset":25,"length":9,"style":"CODE"},{"offset":132,"length":8,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"3t621","text":"4.1.2 日志大小管理","type":"header-four","depth":0,"inlineStyleRanges":[{"offset":0,"length":12,"style":"BOLD"}],"entityRanges":[],"data":{"text":"4.1.2-%E6%97%A5%E5%BF%97%E5%A4%A7%E5%B0%8F%E7%AE%A1%E7%90%86"}},{"key":"9ct77","text":"4.1.2.1 集群空间管理的配置项","type":"header-five","depth":0,"inlineStyleRanges":[{"offset":0,"length":18,"style":"BOLD"}],"entityRanges":[],"data":{"text":"4.1.2.1-%E9%9B%86%E7%BE%A4%E7%A9%BA%E9%97%B4%E7%AE%A1%E7%90%86%E7%9A%84%E9%85%8D%E7%BD%AE%E9%A1%B9"}},{"key":"bqdd4","text":"log_disk_size","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":13,"style":"BOLD"}],"entityRanges":[],"data":{}},{"key":"98jsa","text":"用于设置 Redo 日志磁盘的大小,即本 OBServer 进程(节点)可以使用的日志盘总空间大小。各个节点可以保持不同 log_disk_size 参数。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":61,"length":13,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"e9vvc","text":"该配置项的值为 0 时,会根据 log_disk_percentage 配置项设置的值分配日志盘空间。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":16,"length":19,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"d0cmb","text":"OBServer 节点启动时,会预分配足够多的日志文件。例如:用户配置 log_disk_size = 100G,那么 OBServer 节点第一次启动时,就会预分配 100G 的日志文件作为日志文件池。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":36,"length":20,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"b81m","text":"预分配的路径 \u003cdata_dir\u003e/clog/log_pool/ 下很多 64MB 的文件。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":7,"length":25,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"7c15l","text":"log_disk_percentage","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":19,"style":"BOLD"}],"entityRanges":[],"data":{}},{"key":"5gojr","text":"用于设置 Redo 日志占用其所在磁盘总空间的百分比。只有 log_disk_size = 0 时,才会根据 log_disk_percentage 配置项设置的值分配日志盘空间;否则 log_disk_percentage 不生效。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":30,"length":17,"style":"CODE"},{"offset":55,"length":19,"style":"CODE"},{"offset":93,"length":19,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"adcik","text":"当 log_disk_percentage = 0、log_disk_size = 0 同时满足时,系统会根据日志和数据是否共用同一磁盘来自动计算 Redo 日志占用其所在磁盘总空间的百分比:","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":2,"length":23,"style":"CODE"},{"offset":26,"length":17,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"86m4f","text":"共用时,Redo 日志占用其所在磁盘总空间的百分比为 30%,即分配磁盘总空间 30% 的日志文件。","type":"unordered-list-item","depth":1,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"7nhbm","text":"独占时,Redo 日志占用其所在磁盘总空间的百分比为 90%,即分配磁盘总空间 90% 的日志文件。","type":"unordered-list-item","depth":1,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"c58ec","text":"4.1.2.2 租户空间管理","type":"header-five","depth":0,"inlineStyleRanges":[{"offset":0,"length":14,"style":"BOLD"}],"entityRanges":[],"data":{"text":"4.1.2.2-%E7%A7%9F%E6%88%B7%E7%A9%BA%E9%97%B4%E7%AE%A1%E7%90%86"}},{"key":"ekqro","text":"日志大小通过规格的 log_disk_size 属性指定,最小为 2G(否则规格将创建失败)。当未指定时,log_disk_size 将默认设置为内存的 3 倍大小。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":10,"length":13,"style":"CODE"},{"offset":53,"length":13,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"34fbn","text":"规格的日志大小包含业务租户和 meta 租户(且相互隔离):其中 meta 租户 = max(log_disk_size * 10%, 512M),剩余的给业务租户。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":15,"length":4,"style":"CODE"},{"offset":33,"length":4,"style":"CODE"},{"offset":43,"length":30,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"3nmej","text":"OBServer 节点上创建租户Unit时,会为Unit预留足够多的日志盘空间,如果本地剩余日志盘空间(日志盘可用空间总大小 — 已分配空间)不满足Unit规格要求,则创建租户 Unit 失败。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":89,"length":4,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"do7e9","text":"每个租户在分配或扩容时,可以通过视图 oceanbase.GVOB_SERVERS 来查询节点总资源和已经分配的资源。确保所有租户的 log_disk_size满足: sum(log_disk_size) \u003c= GV","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[{"offset":31,"length":77,"key":3}],"data":{}},{"key":"6onf7","text":"4.1.3 日志空间回收","type":"header-four","depth":0,"inlineStyleRanges":[{"offset":0,"length":12,"style":"BOLD"}],"entityRanges":[],"data":{"text":"4.1.3-%E6%97%A5%E5%BF%97%E7%A9%BA%E9%97%B4%E5%9B%9E%E6%94%B6"}},{"key":"8nooi","text":"回收条件","type":"header-five","depth":0,"inlineStyleRanges":[{"offset":0,"length":4,"style":"BOLD"}],"entityRanges":[],"data":{"text":"%E5%9B%9E%E6%94%B6%E6%9D%A1%E4%BB%B6"}},{"key":"dkudo","text":"当一个 clog 文件中的所有分区日志对应的数据都已经转储到 SSTable 中时,该 clog 文件就满足了回收条件。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"be3ti","text":"当租户日志盘使用量超过租户日志盘空间总量乘以 log_disk_utilization_threshold 时,进行日志文件重用。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":23,"length":30,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"e0bnp","text":"当租户日志盘使用量超过租户日志盘空间总量乘以 log_disk_utilization_limit_threshold 时,不再允许日志写入。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":23,"length":36,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"fg1sd","text":"回收过程","type":"header-five","depth":0,"inlineStyleRanges":[{"offset":0,"length":4,"style":"BOLD"}],"entityRanges":[],"data":{"text":"%E5%9B%9E%E6%94%B6%E8%BF%87%E7%A8%8B"}},{"key":"6i73v","text":"检查与标记:OceanBase 系统会定期检查 clog 文件的回收条件。一旦某个 clog 文件满足回收条件,它就会被标记为可回收。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"2bu02","text":"日志回放与确认:在回收 Clog 文件之前,系统会确保与该文件相关的所有日志都已经成功回放并持久化到数据文件中。这是通过 Paxos 协议在多个副本间同步日志来实现的。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"7btvc","text":"删除与重用:一旦确认 Clog 文件不再需要,系统就会将其删除以释放存储空间。同时,为了优化存储空间的使用,OceanBase 还允许在日志文件空间不足时重用旧的日志文件。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"fdip6","text":"4.2 检查日志流状态","type":"header-three","depth":0,"inlineStyleRanges":[{"offset":0,"length":11,"style":"BOLD"}],"entityRanges":[],"data":{"text":"4.2-%E6%A3%80%E6%9F%A5%E6%97%A5%E5%BF%97%E6%B5%81%E7%8A%B6%E6%80%81"}},{"key":"a41l3","text":"了解日志流原理及与表/分区的关系后,发现表/分区的 LEADER 分布由日志流的 LEADER 分布决定。再次检查表的分布和日志流分布:","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"7370o","text":"SELECT a.tenant_id,tenant_name,database_name,ls_id,zone,svr_ip,role,count(1)\nFROM OCEANBASE.CDB_OB_TABLE_LOCATIONS a join oceanbase.DBA_OB_TENANTS b\non a.tenant_id=b.tenant_id\ngroup by tenant_name,database_name,ls_id,zone,svr_ip,role\norder by a.tenant_id,database_name,ls_id;\n","type":"code-block","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{"syntax":"javascript"}},{"key":"1inp9","text":"\ud83d","type":"atomic","depth":0,"inlineStyleRanges":[],"entityRanges":[{"offset":0,"length":1,"key":4}],"data":{}},{"key":"7gs7l","text":"发现 meta 租户的日志流 LSID = 1 已正常建立完成,业务租户的 LSID = 1 日志流已正常建立完成,LSID = 1001 已正常建立完成,LSID = 1002 只建立了两个副本,LSID = 1003 无副本。","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":3,"length":4,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"4o4e3","text":"通过 CDB_OB_LS 检查日志流的状态,发现日志状态一直处于 CREATING 中:","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":3,"length":9,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"8ge3a","text":"select TENANT_ID,LS_ID,STATUS,PRIMARY_ZONE from oceanbase.CDB_OB_LS;\n","type":"code-block","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{"syntax":"javascript"}},{"key":"etn4m","text":"\ud83d","type":"atomic","depth":0,"inlineStyleRanges":[],"entityRanges":[{"offset":0,"length":1,"key":5}],"data":{}},{"key":"9kvb","text":"该状态表示日志流一直处于“创建中”。那为何会出现该状态呢!","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"ab82c","text":"5错误日志分析","type":"header-two","depth":0,"inlineStyleRanges":[{"offset":0,"length":7,"style":"BOLD"}],"entityRanges":[],"data":{"text":"5%E9%94%99%E8%AF%AF%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90"}},{"key":"88jdg","text":"5.1 错误日志知识点","type":"header-three","depth":0,"inlineStyleRanges":[{"offset":0,"length":11,"style":"BOLD"}],"entityRanges":[],"data":{"text":"5.1-%E9%94%99%E8%AF%AF%E6%97%A5%E5%BF%97%E7%9F%A5%E8%AF%86%E7%82%B9"}},{"key":"donad","text":"OceanBase 的日志路径下的 log 目录,默认路径在 /home/admin/oceanbase/log。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":31,"length":25,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"avppb","text":"包含 4 个主日志 observer.log、rootservice.log、election.log 和 trace.log,分别对应 observer 日志、RS 日志、选举日志和全链路追踪日志。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"8m495","text":"当主日志达到 256M 时,通过 RENAME 为其归档,命名是在后面加上时间戳,比如 observer.log.20240901123456。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":17,"length":6,"style":"CODE"},{"offset":44,"length":27,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"b42ft","text":"日志格式为:[时间] 日志级别 [所属模块] 函数名(文件:行号) [线程id][线程名][所属租户][trace_id] 日志内容 [(内容相关参数)]。日志从低到高分为:DEBUG、TRACE、INFO、WARN、USER_ERR、ERROR。其中 ERROR 日志比较特殊,会将打日志时所在的堆栈打印出来(需要通过符号表解析)。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"acuhv","text":"trace_ID:OceanBase 数据库内部的 SQL 级别的 ID,格式为 Y0 - 0000000000000000 - 0 - 0,可以根据找到一条 SQL 的执行过程,是排查问题的重要手段。也可以通过 SELECT last_trace_id(); 显示获取 trace_id。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[{"offset":41,"length":29,"style":"CODE"},{"offset":107,"length":23,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"frcql","text":"除了 4 个主日志,还有 observer.log.wf、rootservice.log.wf。该日志包括 WARN 级别或以上的日志。当主日志被归档时,wf 日志也会同时被归档,并保持与主日志相同的时间戳后缀。根据 wf 日志的 trace_id,在主日志找到 SQL 的执行过程;根据时间在主日志找到某一行具体的日志。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"boi6","text":"相关参数(略)。","type":"ordered-list-item","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"dt5ra","text":"5.2 检查日志","type":"header-three","depth":0,"inlineStyleRanges":[{"offset":0,"length":8,"style":"BOLD"}],"entityRanges":[],"data":{"text":"5.2-%E6%A3%80%E6%9F%A5%E6%97%A5%E5%BF%97"}},{"key":"7h9cj","text":"检查 wf 日志,发现频繁产生 ERROR 错误:","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"ac80i","text":"[2024-10-29 00:03:56.112302] ERROR issue_dba_error (ob_Log.cpp:1875)[38115][T1060_L0_G0][T1060][YB420A008BAD-000624C0A09C1A91-0-0] [Lt-17][errcode=4388] Unexpect\ned internal error happen, please checkout the internal errcode(errcode=-4264, file=\"ob_log_service.cpp\", Lne_no=b89, info=\"create_ls failed!!!\")\n","type":"code-block","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{"syntax":"javascript"}},{"key":"5kipb","text":"根据 wf 日志的 trace_id 在 observer.log 过滤,然后根据时间戳搜索具体的日志行(此处未展示具体日志内容)。","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":10,"length":8,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"701si","text":"根据日志,看到 create_ls failed,失败原因是 OB_LOG_OUTOF_DISK_SPACE。进一步发现 PALF(Paxos - base Append - only File System,是 OceanBase 日志同步服务进行打包后的一个框架简称。每个租户的 zone 都有一个 palf,负责对应 zone、租户下的日志的写入和同步服务)模块中返回异常:PalfEnv can not hold more instance,并反馈 log_disk_size 相关参数。","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":31,"length":23,"style":"CODE"},{"offset":229,"length":13,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"7na6d","text":"执行以下 SQL 检查数据库的日志使用情况:","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"1l6ed","text":"select SVR_IP,SVR_PORT,UNIT_ID,TENANT_ID,\nceil(LOG_DISK_SIZE/1024/1024) LOG_DISK_SIZE_M,ceil\n(LOG_DISK_IN_USE/1024/1024) LOG_DISK_IN_USE_M,\nround(LOG_DISK_IN_USE/LOG_DISK_SIZE*100) LOG_USE_PCT,\nceil(DATA_DISK_IN_USE/1024/1024/1024) DATA_DISK_IN_USE_G,\nSTATUS from oceanbase.GV$OB_UNITS \norder by SVR_IP,TENANT_ID;\n","type":"code-block","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{"syntax":"javascript"}},{"key":"6tpod","text":"\ud83d","type":"atomic","depth":0,"inlineStyleRanges":[],"entityRanges":[{"offset":0,"length":1,"key":6}],"data":{}},{"key":"6irev","text":"select SVR_IP,ZONE,\nround(LOG_DISK_CAPACITY/1024/1024/1024) LOG_DISK_CAPACITY_G,\nround(LOG_DISK_ASSIGNED/1024/1024/1024) LOG_DISK_ASSIGN_G,\nround(LOG_DISK_ASSIGNED/LOG_DISK_CAPACITY*100) LOG_USE_PCT\nfrom oceanbase.GV$OB_SERVERS;\n","type":"code-block","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{"syntax":"javascript"}},{"key":"584bt","text":"\ud83d","type":"atomic","depth":0,"inlineStyleRanges":[],"entityRanges":[{"offset":0,"length":1,"key":7}],"data":{}},{"key":"bem1q","text":"根据 OceanBase 日志管理机制和当前使用数据,发现对应的业务租户的使用率偏低,未见异常。","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"d2p42","text":"确认租户创建语句:","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"6ostu","text":"CREATE RESOURCE UNIT S4_unit_config\nMEMORY_SIZE = '1536M',\nMAX_CPU = 1, MIN_CPU = 1,\nLOG_DISK_SIZE = '2048M',\nMAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1;\n\nCREATE RESOURCE POOL mq_pool_04 \nUNIT='S4_unit_config', \nUNIT_NUM=1, \nZONE_LIST=('zone1','zone2','zone3'); \n\nCREATE TENANT IF NOT EXISTS mysql_tenant4 \nPRIMARY_ZONE='zone1,zone2,zone3', \nRESOURCE_POOL_LIST=('mq_pool_04')\nset OB_TCP_INVITED_NODES='%';\n","type":"code-block","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{"syntax":"javascript"}},{"key":"7g7lm","text":"指定了租户的 LOG_DISK_SIZE 为 2GB,结合日志使用情况,OceanBase 对 meta 租户分配了 512MB,业务租户分配了 1536MB。通过官方相关参数规范,满足最小值要求,但创建仍失败。","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":48,"length":4,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"aeoks","text":"5.3 针对 LOG_DISK_SIZE 进行租户创建测试","type":"header-three","depth":0,"inlineStyleRanges":[{"offset":0,"length":29,"style":"BOLD"}],"entityRanges":[],"data":{"text":"5.3-%E9%92%88%E5%AF%B9-LOG_DISK_SIZE-%E8%BF%9B%E8%A1%8C%E7%A7%9F%E6%88%B7%E5%88%9B%E5%BB%BA%E6%B5%8B%E8%AF%95"}},{"key":"1u3a7","text":"\ud83d","type":"atomic","depth":0,"inlineStyleRanges":[],"entityRanges":[{"offset":0,"length":1,"key":8}],"data":{}},{"key":"99ein","text":"根据以上测试结果,发现只有当 LOG_DISK_SIZE 大小必须大于 2560M 时,所有 LS 才会创建成功,否则会创建失败。","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"c2kcv","text":"5.4 DEBUG 分析","type":"header-three","depth":0,"inlineStyleRanges":[{"offset":0,"length":12,"style":"BOLD"}],"entityRanges":[],"data":{"text":"5.4-DEBUG-%E5%88%86%E6%9E%90"}},{"key":"1isgl","text":"根据 observer.log 的日志内容,在 palf_env_impl.cpp/palf_env.cpp 添加断点,然后重复创建租户。跟踪发现租户创建过程中存在如下堆栈:","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":24,"length":30,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"dg8pa","text":"#0 oceanbase::palf::PalfEnvImpl::check_can_create_palf_handle_impl_() const (this=0x7fe7c33fc030) at ./src/logservice/palf/palf_env_impl.cpp:1197\n#1 0x00007fe820571e72 in oceanbase::palf::PalfEnvImpl::create_palf_handle_impl_(long, oceanbase::palf::AccessMode const\u0026, oceanbase::palf::PalfBaseInfo const\u0026, oceanbase::palf::LogReplicaType, oceanbase::palf::IPalfHandleImpl*\u0026) (this=0x7fe7c33fc030, palf_id=1001, access_mode=@0x7fe7bb14d2ec: APPEND, palf_base_info=..., replica_type=NORMAL_REPLICA, \n ipalf_handle_impl=@0x7fe7bb14d0f0: 0x0) at ./src/logservice/palf/palf_env_impl.cpp:416\n#2 0x00007fe82056aac1 in oceanbase::palf::PalfEnvImpl::create_palf_handle_impl(long, oceanbase::palf::AccessMode const\u0026, oceanbase::palf::PalfBaseInfo const\u0026, oceanbase::palf::IPalfHandleImpl*\u0026) (this=0x7fe7c33fc030, palf_id=1001, access_mode=@0x7fe7bb14d2ec: APPEND, palf_base_info=..., palf_handle_impl=@0x7fe7bb14d0f0: 0x0) at ./src/logservice/palf/palf_env_impl.cpp:382\n#3 0x00007fe82056a91c in oceanbase::palf::PalfEnv::create(long, oceanbase::palf::AccessMode const\u0026, oceanbase::palf::PalfBaseInfo const\u0026, oceanbase::palf::PalfHandle\u0026) (\n this=0x7fe7c33fc030, id=1001, access_mode=@0x7fe7bb14d2ec: APPEND, palf_base_info=..., handle=...) at ./src/logservice/palf/palf_env.cpp:110\n#4 0x00007fe81f7fd54e in oceanbase::logservice::ObLogService::create_ls_(oceanbase::share::ObLSID const\u0026, oceanbase::common::ObReplicaType const\u0026, oceanbase::share::ObTenantRole const\u0026, oceanbase::palf::PalfBaseInfo const\u0026, bool, oceanbase::logservice::ObLogHandler\u0026, oceanbase::logservice::ObLogRestoreHandler\u0026) (this=0x7fe7a5404030, id=..., \n replica_type=@0x7fe7bb14d834: REPLICA_TYPE_FULL, tenant_role=..., palf_base_info=..., allow_log_sync=true, log_handler=..., restore_handler=...)\n at ./src/logservice/ob_log_service.cpp:665\n#5 0x00007fe81f7fcdcc in oceanbase::logservice::ObLogService::create_ls(oceanbase::share::ObLSID const\u0026, oceanbase::common::ObReplicaType const\u0026, oceanbase::share::ObTenantRole const\u0026, oceanbase::palf::PalfBaseInfo const\u0026, bool, oceanbase::logservice::ObLogHandler\u0026, oceanbase::logservice::ObLogRestoreHandler\u0026) (this=0x7fe7a5404030, id=..., \n replica_type=@0x7fe7bb14d834: REPLICA_TYPE_FULL, tenant_role=..., palf_base_info=..., allow_log_sync=true, log_handler=..., restore_handler=...)\n at ./src/logservice/ob_log_service.cpp:343\n#6 0x00007fe828b07498 in oceanbase::storage::ObLS::create_ls(oceanbase::share::ObTenantRole, oceanbase::palf::PalfBaseInfo const\u0026, oceanbase::common::ObReplicaType const\u0026, bool) (\n this=0x7fe7996cc150, tenant_role=..., palf_base_info=..., replica_type=@0x7fe7bb14d834: REPLICA_TYPE_FULL, allow_log_sync=true) at ./src/storage/ls/ob_ls.cpp:405\n#7 0x00007fe828c79ebf in oceanbase::storage::ObLSService::create_ls(oceanbase::obrpc::ObCreateLSArg const\u0026) (this=0x7fe7909ce030, arg=...)\n at ./src/storage/tx_storage/ob_ls_service.cpp:508\n#8 0x00007fe8232d8c52 in oceanbase::observer::ObRpcCreateLSP::process() (this=0x7fe7bb15a700) at ./src/observer/ob_rpc_processor_simple.cpp:1521\n#9 0x00007fe81f601db0 in oceanbase::obrpc::ObRpcProcessorBase::run() (this=0x7fe7bb15a700) at ./deps/oblib/src/rpc/obrpc/ob_rpc_processor_base.cpp:89\n#10 0x00007fe822b07e66 in oceanbase::omt::ObWorkerProcessor::process_one(oceanbase::rpc::ObRequest\u0026) (this=0x7fe7775931a8, req=...) at ./src/observer/omt/ob_worker_processor.cpp:88\n#11 0x00007fe81f2959d3 in oceanbase::omt::ObWorkerProcessor::process(oceanbase::rpc::ObRequest\u0026) (this=0x7fe7775931a8, req=...) at ./src/observer/omt/ob_worker_processor.cpp:157\n#12 0x00007fe822b06d01 in oceanbase::omt::ObThWorker::process_request(oceanbase::rpc::ObRequest\u0026) (this=0x7fe7775930e0, req=...) at ./src/observer/omt/ob_th_worker.cpp:248\n#13 0x00007fe81f294a8f in oceanbase::omt::ObThWorker::worker(long\u0026, long\u0026, int\u0026) (this=0x7fe7775930e0, tenant_id=@0x7fe7bb14ec98: 1046, \n req_recv_timestamp=@0x7fe7bb14ec90: 1729995314847463, worker_level=@0x7fe7bb14ec8c: 0) at ./src/observer/omt/ob_th_worker.cpp:387\n#14 0x00007fe822b072bc in oceanbase::omt::ObThWorker::run(long) (this=0x7fe7775930e0, idx=0) at ./src/observer/omt/ob_th_worker.cpp:424\n#15 0x00007fe82ea0c271 in oceanbase::lib::Thread::run() (this=0x7fe777593310) at ./deps/oblib/src/lib/thread/thread.cpp:164\n#16 0x00007fe82ea0bdae in oceanbase::lib::Thread::__th_start(void*) (arg=0x7fe777593310) at ./deps/oblib/src/lib/thread/thread.cpp:322\n#17 0x00007fe819435dc5 in start_thread () from /lib64/libpthread.so.0\n#18 0x00007fe81916473d in clone () from /lib64/libc.so.6\n","type":"code-block","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{"syntax":"javascript"}},{"key":"3mv9n","text":"在执行 PALF 处理接口创建过程中,需要执行如下检查:","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"brbaj","text":"bool PalfEnvImpl::check_can_create_palf_handle_impl_() const{\n bool bool_ret = true;\n // 统计Palf处理接口的个数。例如当租户的PRIMARY_ZONE三个zone时,返回3.只有一个zone时,返回1\n int64_t count = palf_handle_impl_map_.count();\n // 获取磁盘的参数,包括总大小,回收阈值,限制写入阈值等属性。其中log_disk_usage_limit_size_即为当前该租户创建指定的log_disk_size(2048M) - 租户的日志组大小(512M) = 1536M.\n const PalfDiskOptions disk_opts = disk_options_wrapper_.get_disk_opts_for_recycling_blocks();\n // MIN_DISK_SIZE_PER_PALF_INSTANCE源码定义为512M\n // 计算 (3+1)*512=2048,2048 \u003c= 1536不成立,因此将返回bool_ret为false\n bool_ret = (count + 1) * MIN_DISK_SIZE_PER_PALF_INSTANCE \u003c= disk_opts.log_disk_usage_limit_size_;\n return bool_ret;\n}\n","type":"code-block","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{"syntax":"javascript"}},{"key":"2crj8","text":"结合日志流相关原理和实现代码:","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"egjq0","text":"当需要创建一个包含 3 个 zone 的租户时,所需的日志具体数量如下:","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"8ntno","text":"\ud83d","type":"atomic","depth":0,"inlineStyleRanges":[],"entityRanges":[{"offset":0,"length":1,"key":9}],"data":{}},{"key":"8aeoa","text":"因此,当租户指定的 PRIMARY_ZONE 为 3 个 zone 时,租户在创建时,需要为业务租户创建 4 个日志流,所需的最小日志流大小:","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"6k2d7","text":"(3+1) × 每个 PALF 的最小日志磁盘空间 = 1 × 512MB = 2048M","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"8k3l","text":"由于当前业务租户总的日志大小为总的规格大小 - meta 租户的日志大小为 1536M,小于所需的 2048M,无法满足日志需求检查不通过,LSID=1003 无法创建成功。","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":24,"length":4,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"7h8c8","text":"6故障总结与建议","type":"header-two","depth":0,"inlineStyleRanges":[{"offset":0,"length":8,"style":"BOLD"}],"entityRanges":[],"data":{"text":"6%E6%95%85%E9%9A%9C%E6%80%BB%E7%BB%93%E4%B8%8E%E5%BB%BA%E8%AE%AE"}},{"key":"c7cpt","text":"综合以上分析过程,导致本次单机改三副本操作完成后,表的副本无法均分到三个 zone 的根本原因为:租户创建过程中,规格的 log_disk_size 为 2048M,去除 meta 租户的日志大小,业务租户剩余大小为 1536M。租户的 PRIMARY_ZONE 包含 3 个 zone,OceanBase 内部在创建日志流时,需要检查业务租户的日志空间是否满足总的日志大小大于 4×512M,由于无法满足,导致 LSID=1003 的日志流无法创建成功。因此对应的 zone 无法创建表的主副本。","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":61,"length":13,"style":"CODE"},{"offset":86,"length":4,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"3nejk","text":"建议","type":"header-three","depth":0,"inlineStyleRanges":[{"offset":0,"length":2,"style":"BOLD"}],"entityRanges":[],"data":{"text":"%E5%BB%BA%E8%AE%AE"}},{"key":"37fe2","text":"增加规格的 log_disk_size 的大小。如日志空间充足,建议采用默认方式,不指定 log_disk_size 的大小。默认分配为内存的三倍。","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":6,"length":13,"style":"CODE"},{"offset":45,"length":13,"style":"CODE"}],"entityRanges":[],"data":{}},{"key":"69u82","text":"如日志空间有限,必须满足 \u003e= 租户的 (PRIMARY_ZONE 个数+2)+512M。","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":8,"length":36,"style":"BOLD"}],"entityRanges":[],"data":{}},{"key":"9gvip","text":"本文关键字:#OceanBase# #单机版# #日志# #扩容#","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}}],"entityMap":{"0":{"type":"HR","mutability":"IMMUTABLE","data":{"imageUrl":""}},"1":{"type":"IMAGE","mutability":"IMMUTABLE","data":{"imageUrl":"https://developer.qcloudimg.com/http-save/yehe-7053949/1882e06af5c8d7d9f1d43043e3e29c1f.png","imageAlt":"返回结果","name":"返回结果","blockWidth":990,"blockHeight":302}},"2":{"type":"IMAGE","mutability":"IMMUTABLE","data":{"imageUrl":"https://developer.qcloudimg.com/http-save/yehe-7053949/b250a1af9c1d51fbc1b46308a754cf8d.png","imageAlt":"返回结果","name":"返回结果","blockWidth":1080,"blockHeight":398}},"3":{"type":"INLINETEX","mutability":"IMMUTABLE","data":{"teX":"OB_SERVERS 来查询节点总资源和已经分配的资源。确保所有租户的 log_disk_size满足: sum(log_disk_size) \u003c= GV","imageUrl":""}},"4":{"type":"IMAGE","mutability":"IMMUTABLE","data":{"imageUrl":"https://developer.qcloudimg.com/http-save/yehe-7053949/cdd1e11c2f15c41cd1e58840fcd0f4dc.png","imageAlt":"","name":"","blockWidth":1080,"blockHeight":557}},"5":{"type":"IMAGE","mutability":"IMMUTABLE","data":{"imageUrl":"https://developer.qcloudimg.com/http-save/yehe-7053949/54695dd0c2d657d3dff71dc250f4c4eb.png","imageAlt":"","name":"","blockWidth":1080,"blockHeight":371}},"6":{"type":"IMAGE","mutability":"IMMUTABLE","data":{"imageUrl":"https://developer.qcloudimg.com/http-save/yehe-7053949/0804ad747d6eb6ab3e4a37911736e1fd.png","imageAlt":"","name":"","blockWidth":1080,"blockHeight":217}},"7":{"type":"IMAGE","mutability":"IMMUTABLE","data":{"imageUrl":"https://developer.qcloudimg.com/http-save/yehe-7053949/137159bf5740f000b2c1f8d847cd82f3.png","imageAlt":"","name":"","blockWidth":1080,"blockHeight":174}},"8":{"type":"IMAGE","mutability":"IMMUTABLE","data":{"imageUrl":"https://developer.qcloudimg.com/http-save/yehe-7053949/368247d6292552b9d5ecc5fcf29cdfa3.jpg","imageAlt":"","name":"","blockWidth":1080,"blockHeight":526}},"9":{"type":"IMAGE","mutability":"IMMUTABLE","data":{"imageUrl":"https://developer.qcloudimg.com/http-save/yehe-7053949/ec813205446a26cc507774b1eb6e9b19.jpg","imageAlt":"","name":"","blockWidth":1080,"blockHeight":254}}}},"createTime":1739979307,"ext":{"closeTextLink":0,"comment_ban":0,"description":"","focusRead":0},"favNum":0,"isOriginal":0,"likeNum":0,"pic":"https://developer.qcloudimg.com/http-save/10011/e31d1d26cb90bf9217de3465f49f20cf.jpg","plain":"作者:李锡超,苏商银行DBA,负责数据库和中间件运维和建设。擅长 MySQL、Python、Oracle,爱好骑行、技术研究和分享。\n\n爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。\n本文约 4500 字,预计阅读需要 15 分钟。\n近期,在进行 OceanBase 测试时,执行了一次单机转单副本的测试。按照官方文档步骤操作后,发现了不少问题,在此进行总结。\n1租户扩容\n建议先对 sys 租户进行扩容,这应该是必要步骤,否则扩容后可能是“伪集群”。官方文档似乎遗漏了这一步骤,笔者在后续过程中发现问题,尝试解决时才注意到。\n建议在扩容业务租户前执行以下操作:\nALTER RESOURCE POOL sys_pool ZONE_LIST=('zone1','zone2','zone3');\nALTER TENANT sys LOCALITY='F@zone1,F@zone2';\nALTER TENANT sys LOCALITY='F@zone1,F@zone2,F@zone3';\n\n2表的副本管理\n根据测试结果,OceanBase 4.X 版本的表副本管理基本自动化,主要基于租户的 PRIMARY_ZONE 等配置。同时,早期版本中很多关于表副本管理的命令在该版本已被废弃。例如:\nALTER TABLE test_t1 set locality = 'F@zone3,F@zone2,F@zone1';\nALTER TABLE test_t1 locality='F,R{all_server}@ZONE1, F,R{all_server}@ZONE2, F,R{all_server}@ZONE3';\n\n执行上述命令时会报错,提示语法错误,需根据 OceanBase 版本查看正确语法。\n3表副本分布异常分析\n本次测试遇到最大问题是 log_disk_size 参数的设置,导致第一轮测试完全失败,且经过很长时间才找到问题原因。这也是分布式数据库与传统数据库在运维上的典型差异。\n完成租户扩容后,通过以下语句检查表的分布:\nSELECT tenant_name,database_name, table_name, partition_name, index_name, tablet_id,ls_id,zone,svr_ip,role\nFROM OCEANBASE.CDB_OB_TABLE_LOCATIONS a join oceanbase.DBA_OB_TENANTS b\non a.tenant_id=b.tenant_id\nWHERE DATABASE_NAME='MYDB' AND TENANT_NAME='mysql_tenant1'\norder by tenant_name,database_name, table_name, partition_name, zone;\n\nSELECT zone,svr_ip,role,count(1)\nFROM OCEANBASE.CDB_OB_TABLE_LOCATIONS a join oceanbase.DBA_OB_TENANTS b\non a.tenant_id=b.tenant_id\nWHERE DATABASE_NAME='MYDB' AND TENANT_NAME='mysql_tenant1'\ngroup by zone,svr_ip,role\norder by zone;\n\n返回结果\n根据返回结果可知,无论表是否分区,其 LEADER 都只在 zone1、zone2,在 zone3 上全是 FOLLOWER。\n确认租户 PRIMARY_ZONE='zone1,zone2,zone3' ,并建立大量表和分区后,均未发现问题。尝试通过建表时指定分区/表的位置,发现相关指令只能在老版本中执行。停止 zone2 进行强制切换,发现 zone2 停止后,所有 LEADER 都迁移到了 zone1,zone3 仍然全是 FOLLOWER。\n重新安装 3 节点集群、创建租户并导入测试数据后,问题依旧存在。做如下尝试:\n设置 PRIMARY_ZONE='zone1,zone2,zone3' 不生效,尝试设置 PRIMARY_ZONE=RANDOM,问题未解决。\n再次尝试建立数千个分区,观察分布,问题未解决。\n通过日志跟踪表和分区的创建过程,未看出具体原因,问题未解决。\n查阅资料,检查相关参数,包括 enable_rebalance/enable_transfer 参数,均采用默认值(true),表示会开启自动负载均衡功能。了解到小租户的概念及 LEADER 分布规则,尝试建立多个租户后,问题依旧存在。同时,根据资料提示编写命令尝试切换,但 OceanBase 4.X 中不支持相关语法。\n测试发现 ALTER SYSTEM SWITCH REPLICA 命令无法执行,但 4.X 文档提示支持该语法。根据文档语句生成具体命令:\nALTER SYSTEM SWITCH REPLICA LEADER LS = 1002 SERVER = '10.0.139.175:2882' TENANT = mysql_tenant1;\n\n执行切换后,发现所有表和分区的 LEADER 位于 zone2 的,都切换到了 zone3,说明 zone3 正常,只是由于某种原因无法“承担”表的 LEADER。查看日志流分布的语句为:\nSELECT a.TENANT_ID,a.LS_ID,a.SVR_IP,a.SVR_PORT,a.ZONE,a.role,b.TENANT_NAME,b.TENANT_TYPE FROM oceanbase.CDB_OB_LS_LOCATIONS a, oceanbase.DBA_OB_TENANTS b WHERE a.TENANT_ID=b.TENANT_ID;\n\n返回结果\n根据返回结果显示,日志流的 LEADER 也只位于 zone1、zone3。\n4日志流\n4.1 日志管理\n4.1.1 日志流工作原理\nOceanBase 使用日志流(LS、Log Stream)在多副本之间同步状态。每个 Tablet(可理解为一个分区、一个分区索引或一个非分区表)都会对应一个确定的日志流,每个日志流对应多个 Tablet,DML 操作写入 Tablet 的数据所产生的 Redo 日志会持久化在日志流中。日志流的多个副本会分布在不同的可用区中,多个副本之间维持共识算法,选择其中一个副本作为主副本(Leader),其他副本为从副本(Follower)。\nOceanBase 数据库遵循 WAL(write-ahead logging)原则,在事务提交前将 Redo 日志持久化,并使用 Multi-Paxos 协议在多个副本间同步 Redo 日志,即日志流。同一个日志流具有相同的 LSID。\n对于租户 T1 在机器 S1 的所有 Tablet 产生的日志会写入到同一个日志流 LS1,然后 LS1 在机器 S1 将作为 LEADER ,在机器 S2、S3 作为 FOLLOWER。同时,租户 T1 在机器 S2 也有一个日志流 LS2;租户 T1 在机器 S3 也有一个日志流 LS3。\n只有作为 Leader 的日志流,对应机器的 Tablet 才能提供写服务或强一致性读,其它副本只能被动接受日志。\nOceanBase 所有的日志流都对应租户,日志文件存放路径为 \u003cdata_dir\u003e/clog/tenant_xxxx(xxxx 表示租户 ID),sys 租户对应则为 \u003cdata_dir\u003e/clog/tenant_1;文件以从 0 开始的编号(一直递增,不重复)进行命名;单个日志文件大小为 64MB。该方式与传统数据库的 Redo 存在明显差异。\nsys 租户包括一个 LS,LSID 为 1;各 META$xxxx(xxxx 表示租户 ID)租户包括一个 LS,LSID 为 1;各业务租户包含 N + 1 个 LS(N 表示租户中 Zone 的个数),LSID 分别为 1、1001、1002、...,其中 LSID = 1 对应各租户的内部数据库的 Tablet,如 OceanBase、MySQL,1001 或更高的 LSID 在租户的各个 Zone 各有一个,对应所有业务数据库内的 Tablet。\n4.1.2 日志大小管理\n4.1.2.1 集群空间管理的配置项\nlog_disk_size\n用于设置 Redo 日志磁盘的大小,即本 OBServer 进程(节点)可以使用的日志盘总空间大小。各个节点可以保持不同 log_disk_size 参数。\n该配置项的值为 0 时,会根据 log_disk_percentage 配置项设置的值分配日志盘空间。\nOBServer 节点启动时,会预分配足够多的日志文件。例如:用户配置 log_disk_size = 100G,那么 OBServer 节点第一次启动时,就会预分配 100G 的日志文件作为日志文件池。\n预分配的路径 \u003cdata_dir\u003e/clog/log_pool/ 下很多 64MB 的文件。\nlog_disk_percentage\n用于设置 Redo 日志占用其所在磁盘总空间的百分比。只有 log_disk_size = 0 时,才会根据 log_disk_percentage 配置项设置的值分配日志盘空间;否则 log_disk_percentage 不生效。\n当 log_disk_percentage = 0、log_disk_size = 0 同时满足时,系统会根据日志和数据是否共用同一磁盘来自动计算 Redo 日志占用其所在磁盘总空间的百分比:\n共用时,Redo 日志占用其所在磁盘总空间的百分比为 30%,即分配磁盘总空间 30% 的日志文件。\n独占时,Redo 日志占用其所在磁盘总空间的百分比为 90%,即分配磁盘总空间 90% 的日志文件。\n4.1.2.2 租户空间管理\n日志大小通过规格的 log_disk_size 属性指定,最小为 2G(否则规格将创建失败)。当未指定时,log_disk_size 将默认设置为内存的 3 倍大小。\n规格的日志大小包含业务租户和 meta 租户(且相互隔离):其中 meta 租户 = max(log_disk_size * 10%, 512M),剩余的给业务租户。\nOBServer 节点上创建租户Unit时,会为Unit预留足够多的日志盘空间,如果本地剩余日志盘空间(日志盘可用空间总大小 — 已分配空间)不满足Unit规格要求,则创建租户 Unit 失败。\n每个租户在分配或扩容时,可以通过视图 oceanbase.GVOB_SERVERS 来查询节点总资源和已经分配的资源。确保所有租户的 log_disk_size满足: sum(log_disk_size) \u003c= GV\n4.1.3 日志空间回收\n回收条件\n当一个 clog 文件中的所有分区日志对应的数据都已经转储到 SSTable 中时,该 clog 文件就满足了回收条件。\n当租户日志盘使用量超过租户日志盘空间总量乘以 log_disk_utilization_threshold 时,进行日志文件重用。\n当租户日志盘使用量超过租户日志盘空间总量乘以 log_disk_utilization_limit_threshold 时,不再允许日志写入。\n回收过程\n检查与标记:OceanBase 系统会定期检查 clog 文件的回收条件。一旦某个 clog 文件满足回收条件,它就会被标记为可回收。\n日志回放与确认:在回收 Clog 文件之前,系统会确保与该文件相关的所有日志都已经成功回放并持久化到数据文件中。这是通过 Paxos 协议在多个副本间同步日志来实现的。\n删除与重用:一旦确认 Clog 文件不再需要,系统就会将其删除以释放存储空间。同时,为了优化存储空间的使用,OceanBase 还允许在日志文件空间不足时重用旧的日志文件。\n4.2 检查日志流状态\n了解日志流原理及与表/分区的关系后,发现表/分区的 LEADER 分布由日志流的 LEADER 分布决定。再次检查表的分布和日志流分布:\nSELECT a.tenant_id,tenant_name,database_name,ls_id,zone,svr_ip,role,count(1)\nFROM OCEANBASE.CDB_OB_TABLE_LOCATIONS a join oceanbase.DBA_OB_TENANTS b\non a.tenant_id=b.tenant_id\ngroup by tenant_name,database_name,ls_id,zone,svr_ip,role\norder by a.tenant_id,database_name,ls_id;\n\n发现 meta 租户的日志流 LSID = 1 已正常建立完成,业务租户的 LSID = 1 日志流已正常建立完成,LSID = 1001 已正常建立完成,LSID = 1002 只建立了两个副本,LSID = 1003 无副本。\n通过 CDB_OB_LS 检查日志流的状态,发现日志状态一直处于 CREATING 中:\nselect TENANT_ID,LS_ID,STATUS,PRIMARY_ZONE from oceanbase.CDB_OB_LS;\n\n该状态表示日志流一直处于“创建中”。那为何会出现该状态呢!\n5错误日志分析\n5.1 错误日志知识点\nOceanBase 的日志路径下的 log 目录,默认路径在 /home/admin/oceanbase/log。\n包含 4 个主日志 observer.log、rootservice.log、election.log 和 trace.log,分别对应 observer 日志、RS 日志、选举日志和全链路追踪日志。\n当主日志达到 256M 时,通过 RENAME 为其归档,命名是在后面加上时间戳,比如 observer.log.20240901123456。\n日志格式为:[时间] 日志级别 [所属模块] 函数名(文件:行号) [线程id][线程名][所属租户][trace_id] 日志内容 [(内容相关参数)]。日志从低到高分为:DEBUG、TRACE、INFO、WARN、USER_ERR、ERROR。其中 ERROR 日志比较特殊,会将打日志时所在的堆栈打印出来(需要通过符号表解析)。\ntrace_ID:OceanBase 数据库内部的 SQL 级别的 ID,格式为 Y0 - 0000000000000000 - 0 - 0,可以根据找到一条 SQL 的执行过程,是排查问题的重要手段。也可以通过 SELECT last_trace_id(); 显示获取 trace_id。\n除了 4 个主日志,还有 observer.log.wf、rootservice.log.wf。该日志包括 WARN 级别或以上的日志。当主日志被归档时,wf 日志也会同时被归档,并保持与主日志相同的时间戳后缀。根据 wf 日志的 trace_id,在主日志找到 SQL 的执行过程;根据时间在主日志找到某一行具体的日志。\n相关参数(略)。\n5.2 检查日志\n检查 wf 日志,发现频繁产生 ERROR 错误:\n[2024-10-29 00:03:56.112302] ERROR issue_dba_error (ob_Log.cpp:1875)[38115][T1060_L0_G0][T1060][YB420A008BAD-000624C0A09C1A91-0-0] [Lt-17][errcode=4388] Unexpect\ned internal error happen, please checkout the internal errcode(errcode=-4264, file=\"ob_log_service.cpp\", Lne_no=b89, info=\"create_ls failed!!!\")\n\n根据 wf 日志的 trace_id 在 observer.log 过滤,然后根据时间戳搜索具体的日志行(此处未展示具体日志内容)。\n根据日志,看到 create_ls failed,失败原因是 OB_LOG_OUTOF_DISK_SPACE。进一步发现 PALF(Paxos - base Append - only File System,是 OceanBase 日志同步服务进行打包后的一个框架简称。每个租户的 zone 都有一个 palf,负责对应 zone、租户下的日志的写入和同步服务)模块中返回异常:PalfEnv can not hold more instance,并反馈 log_disk_size 相关参数。\n执行以下 SQL 检查数据库的日志使用情况:\nselect SVR_IP,SVR_PORT,UNIT_ID,TENANT_ID,\nceil(LOG_DISK_SIZE/1024/1024) LOG_DISK_SIZE_M,ceil\n(LOG_DISK_IN_USE/1024/1024) LOG_DISK_IN_USE_M,\nround(LOG_DISK_IN_USE/LOG_DISK_SIZE*100) LOG_USE_PCT,\nceil(DATA_DISK_IN_USE/1024/1024/1024) DATA_DISK_IN_USE_G,\nSTATUS from oceanbase.GV$OB_UNITS \norder by SVR_IP,TENANT_ID;\n\nselect SVR_IP,ZONE,\nround(LOG_DISK_CAPACITY/1024/1024/1024) LOG_DISK_CAPACITY_G,\nround(LOG_DISK_ASSIGNED/1024/1024/1024) LOG_DISK_ASSIGN_G,\nround(LOG_DISK_ASSIGNED/LOG_DISK_CAPACITY*100) LOG_USE_PCT\nfrom oceanbase.GV$OB_SERVERS;\n\n根据 OceanBase 日志管理机制和当前使用数据,发现对应的业务租户的使用率偏低,未见异常。\n确认租户创建语句:\nCREATE RESOURCE UNIT S4_unit_config\nMEMORY_SIZE = '1536M',\nMAX_CPU = 1, MIN_CPU = 1,\nLOG_DISK_SIZE = '2048M',\nMAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1;\n\nCREATE RESOURCE POOL mq_pool_04 \nUNIT='S4_unit_config', \nUNIT_NUM=1, \nZONE_LIST=('zone1','zone2','zone3'); \n\nCREATE TENANT IF NOT EXISTS mysql_tenant4 \nPRIMARY_ZONE='zone1,zone2,zone3', \nRESOURCE_POOL_LIST=('mq_pool_04')\nset OB_TCP_INVITED_NODES='%';\n\n指定了租户的 LOG_DISK_SIZE 为 2GB,结合日志使用情况,OceanBase 对 meta 租户分配了 512MB,业务租户分配了 1536MB。通过官方相关参数规范,满足最小值要求,但创建仍失败。\n5.3 针对 LOG_DISK_SIZE 进行租户创建测试\n根据以上测试结果,发现只有当 LOG_DISK_SIZE 大小必须大于 2560M 时,所有 LS 才会创建成功,否则会创建失败。\n5.4 DEBUG 分析\n根据 observer.log 的日志内容,在 palf_env_impl.cpp/palf_env.cpp 添加断点,然后重复创建租户。跟踪发现租户创建过程中存在如下堆栈:\n#0 oceanbase::palf::PalfEnvImpl::check_can_create_palf_handle_impl_() const (this=0x7fe7c33fc030) at ./src/logservice/palf/palf_env_impl.cpp:1197\n#1 0x00007fe820571e72 in oceanbase::palf::PalfEnvImpl::create_palf_handle_impl_(long, oceanbase::palf::AccessMode const\u0026, oceanbase::palf::PalfBaseInfo const\u0026, oceanbase::palf::LogReplicaType, oceanbase::palf::IPalfHandleImpl*\u0026) (this=0x7fe7c33fc030, palf_id=1001, access_mode=@0x7fe7bb14d2ec: APPEND, palf_base_info=..., replica_type=NORMAL_REPLICA, \n ipalf_handle_impl=@0x7fe7bb14d0f0: 0x0) at ./src/logservice/palf/palf_env_impl.cpp:416\n#2 0x00007fe82056aac1 in oceanbase::palf::PalfEnvImpl::create_palf_handle_impl(long, oceanbase::palf::AccessMode const\u0026, oceanbase::palf::PalfBaseInfo const\u0026, oceanbase::palf::IPalfHandleImpl*\u0026) (this=0x7fe7c33fc030, palf_id=1001, access_mode=@0x7fe7bb14d2ec: APPEND, palf_base_info=..., palf_handle_impl=@0x7fe7bb14d0f0: 0x0) at ./src/logservice/palf/palf_env_impl.cpp:382\n#3 0x00007fe82056a91c in oceanbase::palf::PalfEnv::create(long, oceanbase::palf::AccessMode const\u0026, oceanbase::palf::PalfBaseInfo const\u0026, oceanbase::palf::PalfHandle\u0026) (\n this=0x7fe7c33fc030, id=1001, access_mode=@0x7fe7bb14d2ec: APPEND, palf_base_info=..., handle=...) at ./src/logservice/palf/palf_env.cpp:110\n#4 0x00007fe81f7fd54e in oceanbase::logservice::ObLogService::create_ls_(oceanbase::share::ObLSID const\u0026, oceanbase::common::ObReplicaType const\u0026, oceanbase::share::ObTenantRole const\u0026, oceanbase::palf::PalfBaseInfo const\u0026, bool, oceanbase::logservice::ObLogHandler\u0026, oceanbase::logservice::ObLogRestoreHandler\u0026) (this=0x7fe7a5404030, id=..., \n replica_type=@0x7fe7bb14d834: REPLICA_TYPE_FULL, tenant_role=..., palf_base_info=..., allow_log_sync=true, log_handler=..., restore_handler=...)\n at ./src/logservice/ob_log_service.cpp:665\n#5 0x00007fe81f7fcdcc in oceanbase::logservice::ObLogService::create_ls(oceanbase::share::ObLSID const\u0026, oceanbase::common::ObReplicaType const\u0026, oceanbase::share::ObTenantRole const\u0026, oceanbase::palf::PalfBaseInfo const\u0026, bool, oceanbase::logservice::ObLogHandler\u0026, oceanbase::logservice::ObLogRestoreHandler\u0026) (this=0x7fe7a5404030, id=..., \n replica_type=@0x7fe7bb14d834: REPLICA_TYPE_FULL, tenant_role=..., palf_base_info=..., allow_log_sync=true, log_handler=..., restore_handler=...)\n at ./src/logservice/ob_log_service.cpp:343\n#6 0x00007fe828b07498 in oceanbase::storage::ObLS::create_ls(oceanbase::share::ObTenantRole, oceanbase::palf::PalfBaseInfo const\u0026, oceanbase::common::ObReplicaType const\u0026, bool) (\n this=0x7fe7996cc150, tenant_role=..., palf_base_info=..., replica_type=@0x7fe7bb14d834: REPLICA_TYPE_FULL, allow_log_sync=true) at ./src/storage/ls/ob_ls.cpp:405\n#7 0x00007fe828c79ebf in oceanbase::storage::ObLSService::create_ls(oceanbase::obrpc::ObCreateLSArg const\u0026) (this=0x7fe7909ce030, arg=...)\n at ./src/storage/tx_storage/ob_ls_service.cpp:508\n#8 0x00007fe8232d8c52 in oceanbase::observer::ObRpcCreateLSP::process() (this=0x7fe7bb15a700) at ./src/observer/ob_rpc_processor_simple.cpp:1521\n#9 0x00007fe81f601db0 in oceanbase::obrpc::ObRpcProcessorBase::run() (this=0x7fe7bb15a700) at ./deps/oblib/src/rpc/obrpc/ob_rpc_processor_base.cpp:89\n#10 0x00007fe822b07e66 in oceanbase::omt::ObWorkerProcessor::process_one(oceanbase::rpc::ObRequest\u0026) (this=0x7fe7775931a8, req=...) at ./src/observer/omt/ob_worker_processor.cpp:88\n#11 0x00007fe81f2959d3 in oceanbase::omt::ObWorkerProcessor::process(oceanbase::rpc::ObRequest\u0026) (this=0x7fe7775931a8, req=...) at ./src/observer/omt/ob_worker_processor.cpp:157\n#12 0x00007fe822b06d01 in oceanbase::omt::ObThWorker::process_request(oceanbase::rpc::ObRequest\u0026) (this=0x7fe7775930e0, req=...) at ./src/observer/omt/ob_th_worker.cpp:248\n#13 0x00007fe81f294a8f in oceanbase::omt::ObThWorker::worker(long\u0026, long\u0026, int\u0026) (this=0x7fe7775930e0, tenant_id=@0x7fe7bb14ec98: 1046, \n req_recv_timestamp=@0x7fe7bb14ec90: 1729995314847463, worker_level=@0x7fe7bb14ec8c: 0) at ./src/observer/omt/ob_th_worker.cpp:387\n#14 0x00007fe822b072bc in oceanbase::omt::ObThWorker::run(long) (this=0x7fe7775930e0, idx=0) at ./src/observer/omt/ob_th_worker.cpp:424\n#15 0x00007fe82ea0c271 in oceanbase::lib::Thread::run() (this=0x7fe777593310) at ./deps/oblib/src/lib/thread/thread.cpp:164\n#16 0x00007fe82ea0bdae in oceanbase::lib::Thread::__th_start(void*) (arg=0x7fe777593310) at ./deps/oblib/src/lib/thread/thread.cpp:322\n#17 0x00007fe819435dc5 in start_thread () from /lib64/libpthread.so.0\n#18 0x00007fe81916473d in clone () from /lib64/libc.so.6\n\n在执行 PALF 处理接口创建过程中,需要执行如下检查:\nbool PalfEnvImpl::check_can_create_palf_handle_impl_() const{\n bool bool_ret = true;\n // 统计Palf处理接口的个数。例如当租户的PRIMARY_ZONE三个zone时,返回3.只有一个zone时,返回1\n int64_t count = palf_handle_impl_map_.count();\n // 获取磁盘的参数,包括总大小,回收阈值,限制写入阈值等属性。其中log_disk_usage_limit_size_即为当前该租户创建指定的log_disk_size(2048M) - 租户的日志组大小(512M) = 1536M.\n const PalfDiskOptions disk_opts = disk_options_wrapper_.get_disk_opts_for_recycling_blocks();\n // MIN_DISK_SIZE_PER_PALF_INSTANCE源码定义为512M\n // 计算 (3+1)*512=2048,2048 \u003c= 1536不成立,因此将返回bool_ret为false\n bool_ret = (count + 1) * MIN_DISK_SIZE_PER_PALF_INSTANCE \u003c= disk_opts.log_disk_usage_limit_size_;\n return bool_ret;\n}\n\n结合日志流相关原理和实现代码:\n当需要创建一个包含 3 个 zone 的租户时,所需的日志具体数量如下:\n因此,当租户指定的 PRIMARY_ZONE 为 3 个 zone 时,租户在创建时,需要为业务租户创建 4 个日志流,所需的最小日志流大小:\n(3+1) × 每个 PALF 的最小日志磁盘空间 = 1 × 512MB = 2048M\n由于当前业务租户总的日志大小为总的规格大小 - meta 租户的日志大小为 1536M,小于所需的 2048M,无法满足日志需求检查不通过,LSID=1003 无法创建成功。\n6故障总结与建议\n综合以上分析过程,导致本次单机改三副本操作完成后,表的副本无法均分到三个 zone 的根本原因为:租户创建过程中,规格的 log_disk_size 为 2048M,去除 meta 租户的日志大小,业务租户剩余大小为 1536M。租户的 PRIMARY_ZONE 包含 3 个 zone,OceanBase 内部在创建日志流时,需要检查业务租户的日志空间是否满足总的日志大小大于 4×512M,由于无法满足,导致 LSID=1003 的日志流无法创建成功。因此对应的 zone 无法创建表的主副本。\n建议\n增加规格的 log_disk_size 的大小。如日志空间充足,建议采用默认方式,不指定 log_disk_size 的大小。默认分配为内存的三倍。\n如日志空间有限,必须满足 \u003e= 租户的 (PRIMARY_ZONE 个数+2)+512M。\n本文关键字:#OceanBase# #单机版# #日志# #扩容#","showReadNum":101,"sourceDetail":null,"sourceType":99,"status":2,"summary":"作者:李锡超,苏商银行DBA,负责数据库和中间件运维和建设。擅长 MySQL、Python、Oracle,爱好骑行、技术研究和分享。\n","tagIds":[10244,10671,15009,17220,17413],"title":"OB 运维 | OceanBase 单机改三副本:实操手记与深思","uid":7053949,"updateTime":1739979308,"userSummary":"","userUpdateTime":1739979307,"isNewArticle":false},"authorInfo":{"articleNum":0,"avatarUrl":"https://developer.qcloudimg.com/http-save/10011/864a60182540ad4dc3f05f841a6b5130.jpg","company":"上海爱可生信息技术股份有限公司","introduce":"爱可生开源社区,一个有深度的数据库社区;更多技术分享可关注wx:爱可生开源社区","isProfessionVerified":0,"nickname":"爱可生开源社区","privilege":1,"title":"技术分享","uid":7053949},"authorType":{"isBlogMoveAuthor":1,"isCoCreator":0,"isInternalAuthor":0,"isOriginalAuthor":1},"classify":[{"id":6,"name":"数据库"},{"id":12,"name":"运维"}],"columnInfo":{"columnAvatar":"https://imgcache.qq.com/qcloud/developer/images/release/column-icons/4.png","columnDesc":"","columnId":85409,"columnName":"爱可生开源社区","createTime":1583819783,"createUid":7053949,"memberNum":1,"showArticleNum":889,"showConcernNum":38},"columnList":[{"columnAvatar":"https://imgcache.qq.com/qcloud/developer/images/release/column-icons/4.png","columnDesc":"","columnId":85409,"columnName":"爱可生开源社区","createTime":1583819783,"createUid":7053949,"memberNum":1,"showArticleNum":889,"showConcernNum":38}],"editTime":0,"isTencent":false,"longtailTags":[],"publishTime":1739979307,"sourceDetail":{"blogType":1,"blogUrl":"","channelSource":"req","originalTime":"2025-02-13","sourceAuthor":"爱可生开源社区","sourceLink":"https://mp.weixin.qq.com/s?__biz=MzU2NzgwMTg0MA==\u0026mid=2247520250\u0026idx=1\u0026sn=901134c6f65d1a5ded0e3a75b5c2bc01\u0026chksm=fc956d65cbe2e4735337d0716b1f9f16dfd8c00b22380cc17abd986adc5261256d381362e7e7#rd","wechatNickName":"爱可生开源社区","wechatUserName":"gh_0dc4cf247b24"},"tags":[{"categoryId":3,"createTime":"2018/05/11 12:24:29","groupId":10129,"groupName":"数据库开发","tagId":10244,"tagName":"数据库"},{"categoryId":3,"createTime":"2018/09/06 18:30:02","groupId":10133,"groupName":"开发技术","tagId":10671,"tagName":"运维"},{"categoryId":99,"createTime":"2023/03/14 11:34:15","groupId":0,"groupName":"","tagId":15009,"tagName":"oceanbase"},{"categoryId":99,"createTime":"2023/03/14 11:34:54","groupId":0,"groupName":"","tagId":17220,"tagName":"磁盘"},{"categoryId":99,"createTime":"2023/03/14 11:34:57","groupId":0,"groupName":"","tagId":17413,"tagName":"日志"}],"textLink":[{"ext":{"categoryId":1006,"categoryName":"云产品 - 数据库","desc":"分布式数据库(Tencent Distributed SQL,以下简称 TDSQL)是腾讯打造的一款企业级数据库产品,具备强一致高可用、全球部署架构、高 SQL 兼容度、分布式水平扩展、高性能、完整的分布式事务支持、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。","kpCount":2,"name":"分布式数据库","pCategoryId":1000,"termId":1473},"id":725,"link":"https://cloud.tencent.com/product/tddbms","sources":[1,2],"text":"分布式数据库"},{"ext":{"categoryId":1014,"categoryName":"云产品 - 网络与 CDN","desc":"负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。","kpCount":48,"name":"负载均衡","pCategoryId":1000,"termId":1093},"id":15,"link":"https://cloud.tencent.com/product/clb","sources":[1,2],"text":"负载均衡"},{"ext":{"categoryId":1025,"categoryName":"通用技术 - 运维","desc":"日志分析是指对系统、应用程序、网络等产生的各种日志进行收集、整合、存储、分析和利用的过程。通过对日志数据进行分析,可以了解系统和应用程序的运行情况、发现异常和故障、优化系统性能、改进用户体验等。","kpCount":5,"name":"日志分析","pCategoryId":1002,"termId":1579},"id":1223,"link":"https://cloud.tencent.com/product/es","sources":[1,2],"text":"日志分析"},{"ext":{"categoryId":1025,"categoryName":"通用技术 - 运维","desc":"日志文件是一种记录系统或应用程序运行时发生的事件和活动的文件。这些事件和活动可以是系统错误、警告、信息和调试信息等。日志文件通常包含时间戳、事件类型、事件描述、事件级别等信息。日志文件对于诊断和解决系统问题非常有用,可以帮助开发人员和系统管理员确定系统的状态、性能和稳定性。常见的日志文件格式包括文本格式、XML格式、JSON格式等。日志文件通常保存在本地磁盘上或者远程服务器上,可以通过各种工具和技术进行访问和分析。","kpCount":10,"name":"日志文件","pCategoryId":1002,"termId":1623},"id":3359,"link":"https://cloud.tencent.com/developer/techpedia/1623","sources":[2],"text":"日志文件"},{"ext":{"categoryId":1032,"categoryName":"通用技术 - 开发工具","desc":"中间件是指位于应用程序和操作系统之间的软件组件,用于协调和支持应用程序与操作系统之间的通信和数据传输。中间件可以提供各种服务,例如消息传递、事务处理、安全性、数据转换等,以便应用程序可以更加高效和安全地运行。","kpCount":6,"name":"中间件","pCategoryId":1002,"termId":1633},"id":100,"link":"https://cloud.tencent.com/product/message-queue-catalog","sources":[1,2],"text":"中间件"},{"ext":{"categoryId":1006,"categoryName":"云产品 - 数据库","desc":"数据库(Database)是按照数据结构来组织、存储和管理数据的系统。一个数据库允许用户存储、查找、修改和删除大量相关数据,为各类应用程序提供了高效的数据处理能力。\n在数据库中,数据可以按照表(Tables)、字段(Fields)和记录(Records)进行组织。表是一个二维结构,用于存储一类相关的数据;字段是表中的一个列,用于存储某种类型的数据,比如姓名、年龄等;记录是表中的一行,表示一条完整的数据记录。","kpCount":2,"name":"数据库","pCategoryId":1000,"termId":1471},"id":107,"link":"https://cloud.tencent.com/product/tencentdb-catalog","sources":[1,2],"text":"数据库"},{"ext":{"categoryId":0,"categoryName":"","desc":"","kpCount":0,"name":"","pCategoryId":0,"termId":0},"id":111,"link":"https://cloud.tencent.com/solution/operation","sources":[1],"text":"运维"},{"ext":{"categoryId":1018,"categoryName":"通用技术 - 编程语言","desc":"Python是一种高级的、解释性的、面向对象的计算机编程语言,由Guido van Rossum于1991年开发。Python语言简单易学,具有清晰简洁的语法结构,同时具有强大的标准库和第三方库,可以轻松地实现各种功能和应用,包括Web开发、数据分析、人工智能、科学计算等领域。Python广泛应用于各种领域,是目前最受欢迎的编程语言之一。","kpCount":8,"name":"Python","pCategoryId":1002,"termId":1825},"id":3534,"link":"https://cloud.tencent.com/developer/techpedia/1825","sources":[2],"text":"Python"},{"ext":{"categoryId":1022,"categoryName":"通用技术 - 数据库","desc":"MySQL是一种客户端/服务器模式的数据库,提供高效、可靠、稳定的数据存储和管理服务。","kpCount":5,"name":"MySQL","pCategoryId":1002,"termId":1553},"id":22,"link":"https://cloud.tencent.com/product/cdb","sources":[1,2],"text":"MySQL"}]},"#url:\"/api/tag/products\",params:#tagIds:@10244,10671,15009,17220,17413,,objectType:1,objectId:2497940,,":[{"adActivity":{"id":5738,"lightSpotLabel":"HOT","pageUrl":"https://cloud.tencent.com/act/pro/Featured","priority":1,"startTime":"2023/12/12 17:58:46","title":"2025春季采购节"},"cnName":"数据库","desc":"云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!","docURL":"","hasActivity":false,"icon":"https://qccommunity.qcloudimg.com/community/image/product-comment-icon.svg","introURL":"https://cloud.tencent.com/product/tencentdb-catalog","name":"tencentdb-catalog","productId":0,"shortDesc":"云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。","tagId":0},{"adActivity":{"id":5753,"lightSpotLabel":"HOT","pageUrl":"https://cloud.tencent.com/act/pro/MySQLtry","priority":1,"startTime":"2023/12/13 16:11:02","title":"云数据库采购特惠,高性能、高可靠、高安全,超值优惠等你享!\n"},"cnName":"云数据库 MySQL","desc":"腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。","docURL":"https://cloud.tencent.com/document/product/236","hasActivity":false,"icon":"https://main.qcloudimg.com/image/product/2024/32_32/blue.svg","introURL":"https://cloud.tencent.com/product/cdb","name":"cdb","productId":10923,"shortDesc":"一种高性能、高可靠、可灵活伸缩的数据库托管服务","tagId":10634},{"adActivity":{"id":5738,"lightSpotLabel":"HOT","pageUrl":"https://cloud.tencent.com/act/pro/Featured","priority":1,"startTime":"2023/12/12 17:58:46","title":"2025春季采购节"},"cnName":"负载均衡","desc":"负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。\n\n网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。","docURL":"https://cloud.tencent.com/document/product/214","hasActivity":false,"icon":"https://main.qcloudimg.com/raw/f8a26c4a361a194654b68f9b1f1ae453.svg","introURL":"https://cloud.tencent.com/product/clb","name":"clb","productId":10398,"shortDesc":"安全稳定、低成本投入并且可弹性扩展的实用型流量分配服务","tagId":117},{"adActivity":{"id":5738,"lightSpotLabel":"HOT","pageUrl":"https://cloud.tencent.com/act/pro/Featured","priority":1,"startTime":"2023/12/12 17:58:46","title":"2025春季采购节"},"cnName":"消息队列","desc":"腾讯云消息队列 TDMQ 是分布式架构中的重要组件,提供异步通信的基础能力,通过应用解耦降低系统复杂度,提升系统可用性和可扩展性。TDMQ 产品系列提供丰富的产品形态,包含 CKafka、RocketMQ、RabbitMQ、Pulsar、MQTT、CMQ 六大产品,覆盖在线(电商交易、社交直播等)和离线场景(大数据、日志监控等),满足金融、互联网、教育、物流、能源等不同行业和场景的需求。","docURL":"","hasActivity":false,"icon":"https://qccommunity.qcloudimg.com/community/image/product-comment-icon.svg","introURL":"https://cloud.tencent.com/product/message-queue-catalog","name":"message-queue-catalog","productId":0,"shortDesc":"分布式架构中的重要组件,提供异步通信的基础能力,通过应用解耦降低系统复杂度,提升系统可用性和可扩展性。提供丰富的产品形态,覆盖在线和离线场景,满足金融、互联网、教育、物流、能源等不同行业和场景的需求。","tagId":0},{"adActivity":{"id":5738,"lightSpotLabel":"HOT","pageUrl":"https://cloud.tencent.com/act/pro/Featured","priority":1,"startTime":"2023/12/12 17:58:46","title":"2025春季采购节"},"cnName":"分布式数据库 TDSQL","desc":"分布式数据库TDSQL是腾讯打造的一款高性能企业级数据库产品,具备强一致高可用、高 SQL 兼容度、分布式水平扩展、完整事务支持、企业级安全等特性,并且通过中国信息安全测评中心安全可靠测评,为客户提供完整可靠的分布式数据库解决方案。","docURL":"https://cloud.tencent.com/document/product/1376","hasActivity":false,"icon":"https://main.qcloudimg.com/image/product/2647/32_32/blue.svg","introURL":"https://cloud.tencent.com/product/tddbms","name":"tddbms","productId":11031,"shortDesc":"稳定、安全、高性能的分布式数据库服务,兼容 MySQL、PostgreSQL。","tagId":11124},{"adActivity":{"id":5731,"lightSpotLabel":"HOT","pageUrl":"https://cloud.tencent.com/act/pro/2023seasonbigdata","priority":1,"startTime":"2023/12/12 17:10:31","title":"腾讯云大数据特惠专场\n"},"cnName":"Elasticsearch Service","desc":"腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。","docURL":"https://cloud.tencent.com/document/product/845","hasActivity":false,"icon":"https://main.qcloudimg.com/image/product/2133/32_32/blue.svg","introURL":"https://cloud.tencent.com/product/es","name":"es","productId":10510,"shortDesc":"弹性伸缩、安全可靠的 Elasticsearch 服务,助力海量数据搜索与分析","tagId":11206}]},"tdk":{"title":"OB 运维 | OceanBase 单机改三副本:实操手记与深思-腾讯云开发者社区-腾讯云","keywords":"数据库,运维,oceanbase,磁盘,日志","description":"作者:李锡超,苏商银行DBA,负责数据库和中间件运维和建设。擅长 MySQL、Python、Oracle,爱好骑行、技术研究和分享。\n"},"meta":{"subject":"通用技术-数据库开发-数据库,通用技术-开发技术-运维,其他-空类-oceanbase,其他-空类-磁盘,其他-空类-日志","subjectTime":"2025-02-19 23:35:07","articleSource":"W","magicSource":"N","authorType":"Z,O","productSlug":"tencentdb-catalog,cdb,clb"},"link":{"canonical":"https://cloud.tencent.com/developer/article/2497940"},"cssName":["Article","DraftMaster","Player"],"rbConfigKeys":["groupQRKeywords"],"directedContent":null,"pvId":"8mw3b1DvyzcuLYK-cl80t","clientIp":"8.222.208.146","globalAnnounce":{"announceId":35,"content":"参与人人有奖,腾讯云大模型知识引擎×DeepSeek最佳实践有奖征文正在进行中!点击查看活动详情:\u003ca href=\"https://cloud.tencent.com/developer/article/2496399\" target=\"_blank\"\u003ehttps://cloud.tencent.com/developer/article/2496399\u003c/a\u003e\u003cbr/\u003e \n \u003cimg src=\"https://qcloudimg.tencent-cloud.cn/raw/e8d8f79b0ec4658f3274a7d56238daf4.jpg\"/\u003e","title":"大模型知识引擎×DeepSeek实践征文"},"rbConfig":{"groupQRKeywords":{"AI":{"keywords":[],"img":"https://qcloudimg.tencent-cloud.cn/raw/89b22f53dc3d4e0516d0a4f74ab01a30.png"}},"versionUpdateTipList":[{"id":1005,"title":"文章\u0026问答评论现已支持表情","description":"欢迎大家来体验!","start_time":"2025/02/14 00:00:00","end_time":"2025/02/28 23:59:59"}],"navList":[{"text":"学习","menuList":[{"iconName":"article","title":"文章","desc":"技术干货聚集地","href":"/developer/column?from=19154"},{"iconName":"ask","title":"问答","desc":"技术问题讨论区","href":"/developer/ask?from=19155"},{"iconName":"video","title":"视频","desc":"技术视频记录区","href":"/developer/video?from=19156"},{"iconName":"learn","title":"学习中心","desc":"一站式学习平台","href":"/developer/learning"},{"iconName":"lab","title":"腾讯云实验室","desc":"体验腾讯云产品功能","href":"/lab/labslist?from=20154\u0026from_column=20154\u0026channel=c1004\u0026sceneCode=dev"}]},{"text":"活动","menuList":[{"iconName":"living","title":"直播","desc":"技术大咖面对面","href":"/developer/salon?from=19161"},{"iconName":"competition","title":"竞赛","desc":"秀出你的技术影响力","href":"/developer/competition?from=19162"}]},{"text":"专区","menuList":[{"iconName":"https://qccommunity.qcloudimg.com/icons/tm-zone.svg","title":"腾讯云架构师技术同盟交流圈","desc":"架构行家智汇,海量一线案例","href":"/developer/zone/tm"},{"iconName":"https://qcloudimg.tencent-cloud.cn/raw/1deae15bfe2dcdd1036f601852df7dd2.svg","title":"腾讯云数据库专区","desc":"数据智能管理专家","href":"/developer/zone/tencentdb"},{"iconName":"cloudnative","title":"腾讯云原生专区","desc":"助力业务降本增效","href":"/developer/zone/cloudnative?from=19164"},{"iconName":"https://qccommunity.qcloudimg.com/icons/tencenthunyuan.svg","title":"腾讯混元专区","desc":"具备强大的中文创作、逻辑推理、任务执行能力","href":"/developer/zone/tencenthunyuan"},{"iconName":"https://qcloudimg.tencent-cloud.cn/raw/1d60f881ef280ea992e2e4b6490d974b.svg","title":"腾讯云TCE专区","desc":"私有化云解决方案","href":"/developer/zone/tce"},{"iconName":"https://qccommunity.qcloudimg.com/community/image/lighthouse.svg","title":"腾讯云Lighthouse专区","desc":"新一代开箱即用、面向轻量应用场景的云服务器","href":"/developer/zone/lighthouse"},{"iconName":"https://qccommunity.qcloudimg.com/community/image/HAi.svg","title":"腾讯云HAI专区","desc":"提供即插即用的高性能云服务","href":"/developer/zone/hai"},{"iconName":"https://cloudcache.tencent-cloud.com/qcloud/ui/static/static_source_business/b3e1b483-be77-4e08-827f-ef0e5cda26cf.svg","title":"腾讯云Edgeone专区","desc":"下一代CDN—EdgeOne,不止加速","href":"/developer/zone/tencentcloudedgeone"},{"iconName":"https://qccommunity.qcloudimg.com/community/image/cos.svg","title":"腾讯云存储专区","desc":"安全稳定的海量分布式存储服务","href":"/developer/zone/cos"},{"iconName":"https://qccommunity.qcloudimg.com/community/image/ai.svg","title":"腾讯云智能专区","desc":"数实融合,云上智能","href":"/developer/zone/ai"},{"iconName":"https://qccommunity.qcloudimg.com/community/image/ipass.svg","title":"腾讯轻联专区 ","desc":"新一代应用与数据集成平台","href":"/developer/zone/ipaas"},{"iconName":"https://qccommunity.qcloudimg.com/image/cloudbase.svg","title":"腾讯云开发专区","desc":"云原生一体化开发平台","href":"/developer/zone/tencentcloudbase"},{"iconName":"https://qccommunity.qcloudimg.com/image/TAPD.svg","title":"TAPD专区","desc":"让协作更敏捷","href":"/developer/zone/tapd"}]},{"text":"工具","menuList":[{"iconName":"https://qccommunity.qcloudimg.com/icons/ai-assistant.svg","title":"腾讯云AI代码助手","desc":"辅助编码工具,使研发提效增质","href":"/product/acc?from=22178"},{"iconName":"coding","title":"CODING DevOps","desc":"一站式软件研发管理平台","href":"/product/coding?from=20154\u0026from_column=20154"},{"iconName":"studio","title":"Cloud Studio","desc":"随时随地在线协作开发","href":"/product/cloudstudio?from=20154\u0026from_column=20154"},{"iconName":"sdk","title":"SDK中心","desc":"开发者语言与SDK","href":"/document/sdk?from=20154\u0026from_column=20154"},{"iconName":"api","title":"API中心","desc":"API 助力快捷使用云产品","href":"/document/api?from=20154\u0026from_column=20154"},{"iconName":"tool","title":"命令行工具","desc":"可快速调用管理云资源","href":"/document/product/440/6176?from=20154\u0026from_column=20154"}]}],"activity-popup":{"mImgUrl":"https://qccommunity.qcloudimg.com/mp/images/11-11mobile.jpg","imgUrl":"https://qccommunity.qcloudimg.com/mp/images/11-11pc.jpg","beginTime":"2024/10/24 00:00:00","endTime":"2024/10/31 23:59:59"},"header-advertisement":{"imageUrl":"https://qccommunity.qcloudimg.com/image/2024-11-01-18-15.png","link":"https://cloud.tencent.com/act/pro/double11-2024?from=22374\u0026from_column=22374#miaosha"}},"isBot":false,"session":{"isLogined":false,"isQCloudLogined":false,"isQCommunityLogined":false,"isDifferentUin":false}}},"page":"/article/[articleId]","query":{"articleId":"2497940"},"buildId":"mrM2_FDqoCF8ZQFN7PsJr","assetPrefix":"https://qccommunity.qcloudimg.com/community","isFallback":false,"gssp":true,"appGip":true,"scriptLoader":[]}</script></body></html>