花瓣小跑 发表于 2024-12-28 19:07:09

StarRocks 排查单副本表

文章目录



[*]

[*]StarRocks 排查单副本表
[*]

[*]方式1 查询元数据,检查分区级的副本数
[*]方式2 SHOW PARTITIONS命令查看 ReplicationNum
[*]修改副本数命令


StarRocks 排查单副本表

方式1 查询元数据,检查分区级的副本数

# 方式一 查询元数据,检查分区级的副本数
with v_tmp1 as (
select
    TABLE_ID, PARTITION_ID, tablet_id, count(*) as cnt
from
    information_schema.be_tablets
group by
    TABLE_ID, PARTITION_ID, tablet_id
having
    count(*) = 1
)
select /*+ set_var(query_timeout = 20) */
distinct t1.TABLE_SCHEMA, t1.TABLE_NAME
from information_schema.tables_config t1
join v_tmp1 t2 on t1.TABLE_ID = t2.TABLE_ID
;
方式2 SHOW PARTITIONS命令查看 ReplicationNum

# 方式二 遍历所有库表SHOW PARTITIONS命令查看 ReplicationNum
SHOWPARTITIONS FROM table_name WHERE ReplicationNum = 1
修改副本数命令

# 修改副本数命令
# 修改表基本副本数
ALTER TABLE example_db.my_table SET ("default.replication_num" = "2");
# 单分区副本数
ALTER TABLE example_db.my_table SET ("replication_num" = "2");
# 历史分区副本数
ALTER TABLE example_db.my_table MODIFY PARTITION (*) SET("replication_num"="2");
遍历所有库表实行SHOW PARTITIONS命令
import pymysql
import logging
logging.basicConfig(level=logging.INFO,
                  format='%(asctime)s %(filename)s %(levelname)s %(message)s',
                  filemode='a',
                  filename='./sr.log'
                  )

ip = '10.xx'
port = 9030
user = 'xx'
passwd = 'xx'
database = 'information_schema'

class MysqlUtils(object):
    def __init__(self, ip, port, user, passwd, database):
      self.ip = ip
      self.port = port
      self.user = user
      self.passwd = passwd
      self.database = database
      self.conn = None
      self.cur = None
      try:
            self.conn = pymysql.connect(host=self.ip, user=self.user, passwd=self.passwd, port=self.port,
                                        charset='utf8', database=self.database)
      except Exception as e:
            logging.error("连接失败:{}".format(e))
      if self.conn:
            self.cur = self.conn.cursor()

    def close(self):
      if self.cur:
            self.cur.close()
      if self.conn:
            self.conn.close()

    def insert_data(self, sql, data):
      if self.cur:
            # cur = conn.cursor(pymysql.cursors.DictCursor)
            try:
                self.cur.executemany(sql, data)
            except pymysql.Error as e:
                logging.error("executemany执行失败:{}".format(e))
                self.conn.rollback()
                self.conn.close()
            self.conn.commit()


    def select_data(self,sql):
      if self.cur:
            self.cur.execute(sql)
            res = self.cur.fetchall()
            return res


def start():

    obj = MysqlUtils(ip, port, user, passwd, database)
    sql1 = "show databases;"
    dbs = obj.select_data(sql1)# (('_statistics_',), ('ads_biz',))
    dbs = for d in dbs if d not in ('_statistics_','information_schema')]
        resu = list()
    for db in dbs:

      sql2 = "show tables from {}".format(db)
      tables = obj.select_data(sql2)
      tables = for t in tables]
      # print(tables)

      for table in tables:
            # sql3 = "show create table `{}`.`{}`".format(db,table)
            # sql3 = """ ALTER TABLE `{}`.`{}` MODIFY PARTITION (*) SET("replication_num"="2"); """ .format(db,table)
            sql3 = "SHOWPARTITIONS FROM `{}`.`{}` WHERE ReplicationNum = 1".format(db,table)
            logging.info(sql3)
            try:
                res = obj.select_data(sql3)
            except Exception as e:
                logging.error(e)
            if res:
                resu.append(res)
    obj.close()

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: StarRocks 排查单副本表