tispark 读取时sql语句加上 limit 会 oom

这是来添乱的~ :cowboy_hat_face:
你的问题和他的描述没半毛钱关系(可以忽略)

我对这方面理解的也不是很透,我找了个3亿表测试了一下,说一下我的观点和我的结果:
1.tispark从设计之初,考虑的是数据都拉到spark内存中进行计算,所以我实际操作中都是给予足够载入全表的内存,这种机制也符合spark的常规做法。
2.limit实际上并没有下推到tikv,数据还是拉倒内存中取limit,此时表过大,内存过小,oom必然发生,limit要说优化也能优化,看官方的权衡吧。
我找了个3亿的表测试了一下,加不加limit,内存不够的情况下,都会oom,没有测试出来,加limit会oom,不加就能show出来这个场景,因为我看了一下spark的执行过程,都是全表加载的,我找个百万级别的表,给予足够内存后,加不加也都能出来。
另外,我在跑spark 3+tispark 2.5+tidb 5的时候,我一般都是配置如下四个配置:


少一个都报错,我看你只截图了两个参数,应该是没截全吧。
我看你在git上提了个issue,可以看看官方的回复。

不好意思,我们在讨论tispark的limit问题,不是原生tidb的,不知道是不是我漏了什么信息。

catalog的配置加不加不影响的,tidb catalog测试过,功能不完善且和TiExtensions基本重合,我们就没用。

问题比较复杂,看来要上交流会了… 如果有结果的话,再来更新了… :rofl:

你的表数据量多大,字段多少,能不能给个脱敏的数据结构,因为以前有过字段类型的问题导致TiException触发导致的oom问题,我们收集一下信息,找大佬看看能不能复现。

CREATE TABLE `perio_artical` (
  `random_id` varchar(255) DEFAULT NULL,
  `article_id` varchar(255) NOT NULL,
  `perio_id` varchar(255) DEFAULT NULL,
  `issue_id` varchar(255) DEFAULT NULL,
  `perio_title` varchar(255) DEFAULT NULL,
  `trans_title` text DEFAULT NULL,
  `doi` varchar(255) DEFAULT NULL,
  `article_seq` int(11) DEFAULT NULL,
  `article_title` text DEFAULT NULL,
  `en_title` longtext DEFAULT NULL,
  `authors_name` longtext DEFAULT NULL,
  `trans_authors` longtext DEFAULT NULL,
  `authors_unit` longtext DEFAULT NULL,
  `column_name` varchar(255) DEFAULT NULL,
  `trans_column` text DEFAULT NULL,
  `publish_year` varchar(255) DEFAULT NULL,
  `volume` varchar(255) DEFAULT NULL,
  `issue_num` varchar(255) DEFAULT NULL,
  `abstract` longtext DEFAULT NULL,
  `orig_abstract` longtext DEFAULT NULL,
  `trans_abstract` longtext DEFAULT NULL,
  `text_segment` longtext DEFAULT NULL,
  `language` varchar(255) DEFAULT NULL,
  `trans_language` varchar(255) DEFAULT NULL,
  `keywords` varchar(255) DEFAULT NULL,
  `orig_keys` text DEFAULT NULL,
  `trans_keys` longtext DEFAULT NULL,
  `auto_keys` longtext DEFAULT NULL,
  `head_words` longtext DEFAULT NULL,
  `head_table` longtext DEFAULT NULL,
  `class_code` varchar(255) DEFAULT NULL,
  `orig_classcode` text DEFAULT NULL,
  `orig_class` longtext DEFAULT NULL,
  `auto_classcode` text DEFAULT NULL,
  `page_range` varchar(255) DEFAULT NULL,
  `page_cnt` int(11) DEFAULT NULL,
  `doc_num` varchar(255) DEFAULT NULL,
  `literature_code` varchar(255) DEFAULT NULL,
  `received_date` datetime DEFAULT NULL,
  `revised_date` datetime DEFAULT NULL,
  `orig_pub_date` datetime DEFAULT NULL,
  `pro_pub_date` datetime DEFAULT NULL,
  `abst_webdate` datetime DEFAULT NULL,
  `full_pubdate` datetime DEFAULT NULL,
  `abstract_url` varchar(255) DEFAULT NULL,
  `full_url` varchar(255) DEFAULT NULL,
  `is_fulltext` varchar(255) DEFAULT NULL,
  `is_oa` varchar(255) DEFAULT NULL,
  `service_model` varchar(255) DEFAULT NULL,
  `cn` varchar(255) DEFAULT NULL,
  `issn` varchar(255) DEFAULT NULL,
  `hxkbj_istic` varchar(255) DEFAULT NULL,
  `hxkbj_pku` varchar(255) DEFAULT NULL,
  `hxkbj_nd` varchar(255) DEFAULT NULL,
  `hxkbj_ei` varchar(255) DEFAULT NULL,
  `hxkbj_sci` varchar(255) DEFAULT NULL,
  `refdoc_cnt` int(11) DEFAULT NULL,
  `linkdoc_cnt` int(11) DEFAULT NULL,
  `cited_cnt` int(11) DEFAULT NULL,
  `Fund_info` longtext DEFAULT NULL,
  `core_perio` varchar(255) DEFAULT NULL,
  `is_nstl` int(11) DEFAULT NULL,
  `first_publish` int(11) DEFAULT NULL,
  `source_db` varchar(255) DEFAULT NULL,
  `first_authors` text DEFAULT NULL,
  `batch_id` int(11) DEFAULT NULL,
  `classname_1` longtext DEFAULT NULL,
  `classname_2` longtext DEFAULT NULL,
  `classname_3` longtext DEFAULT NULL,
  `down_count` int(11) DEFAULT NULL,
  `view_count` int(11) DEFAULT NULL,
  `org_name` longtext DEFAULT NULL,
  `new_org` longtext DEFAULT NULL,
  `auth_area` text DEFAULT NULL,
  `auth_city` text DEFAULT NULL,
  `auth_county` text DEFAULT NULL,
  `education_code` text DEFAULT NULL,
  `primary_partition` int(4) GENERATED ALWAYS AS ((crc32(`article_id`)) % 9999) STORED NOT NULL,
  `last_modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `projectID` longtext DEFAULT NULL,
  `FundGroupNameZh` text DEFAULT NULL,
  `ProjectGrantNo` text DEFAULT NULL,
  `IsThirdService` int(11) DEFAULT NULL,
  `spark_update_time` datetime DEFAULT NULL,
  UNIQUE KEY `article_id` (`article_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

数据量:99331717

看研发已经有介入排查了,大家可以关注这个 Issue --> https://github.com/pingcap/tispark/issues/2311

打个岔,麻烦问一下,功能不完善指的是哪些方面?

看了一下,git上的交流,目前 **shiyuhang0**回复https://github.com/pingcap/tispark/pull/2329可以修复这个bug。
简单解释一下,shiyuhang0大佬推测是个limit下推的问题,针对limiit+show的场景没有实现limit的下推。

是的,这情况看起来就是没有下推

你们如何使用的catalog

经测试,该bug在tispark 2.5.1已经解决

1 个赞

果然是个bug

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。