OmniSciDB  72c90bc290
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TableOptimizer.h
Go to the documentation of this file.
1 /*
2  * Copyright 2022 HEAVY.AI, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 
19 #include "Catalog/Catalog.h"
20 
21 class Executor;
22 struct TableUpdateMetadata;
23 
25  size_t total_row_count{0};
26  std::unordered_map<int, size_t> visible_row_count_per_fragment;
27  std::unordered_map<int, ChunkStats> chunk_stats_per_fragment;
28 };
29 
39  public:
41  Executor* executor,
43 
50  void recomputeMetadata() const;
51 
57  void recomputeMetadataUnlocked(const TableUpdateMetadata& table_update_metadata) const;
58 
66  void vacuumDeletedRows() const;
67 
73  const TableUpdateMetadata& table_update_metadata) const;
74 
75  private:
77  const TableDescriptor* td,
78  const std::set<size_t>& fragment_indexes = {}) const;
79 
81  const ColumnDescriptor* cd,
82  const std::unordered_map<int, size_t>& tuple_count_map,
83  std::optional<Data_Namespace::MemoryLevel> memory_level,
84  const std::set<size_t>& fragment_indexes) const;
85 
86  std::set<size_t> getFragmentIndexes(const TableDescriptor* td,
87  const std::set<int>& fragment_ids) const;
88 
89  void vacuumFragments(const TableDescriptor* td,
90  const std::set<int>& fragment_ids = {}) const;
91 
93  const TableDescriptor* td,
94  const std::set<size_t>& fragment_indexes) const;
95 
97  Executor* executor_;
99 
100  // We can use a smaller block size here, since we won't be running projection queries
101  static constexpr size_t ROW_SET_SIZE{1000000000};
102 };
DeletedColumnStats getDeletedColumnStats(const TableDescriptor *td, const std::set< size_t > &fragment_indexes) const
void vacuumFragmentsAboveMinSelectivity(const TableUpdateMetadata &table_update_metadata) const
std::string cat(Ts &&...args)
class for a per-database catalog. also includes metadata for the current database and the current use...
Definition: Catalog.h:143
void recomputeMetadataUnlocked(const TableUpdateMetadata &table_update_metadata) const
Recomputes column chunk metadata for the given set of fragments. The caller of this method is expecte...
Driver for running cleanup processes on a table. TableOptimizer provides functions for various cleanu...
static constexpr size_t ROW_SET_SIZE
const TableDescriptor * td_
This file contains the class specification and related data structures for Catalog.
Executor * executor_
std::unordered_map< int, size_t > visible_row_count_per_fragment
void vacuumDeletedRows() const
Compacts fragments to remove deleted rows. When a row is deleted, a boolean deleted system column is ...
specifies the content in-memory of a row in the column metadata table
std::unordered_map< int, ChunkStats > chunk_stats_per_fragment
void recomputeColumnMetadata(const TableDescriptor *td, const ColumnDescriptor *cd, const std::unordered_map< int, size_t > &tuple_count_map, std::optional< Data_Namespace::MemoryLevel > memory_level, const std::set< size_t > &fragment_indexes) const
DeletedColumnStats recomputeDeletedColumnMetadata(const TableDescriptor *td, const std::set< size_t > &fragment_indexes={}) const
Executor(const ExecutorId id, Data_Namespace::DataMgr *data_mgr, const size_t block_size_x, const size_t grid_size_x, const size_t max_gpu_slab_size, const std::string &debug_dir, const std::string &debug_file)
Definition: Execute.cpp:272
TableOptimizer(const TableDescriptor *td, Executor *executor, const Catalog_Namespace::Catalog &cat)
const Catalog_Namespace::Catalog & cat_
void recomputeMetadata() const
Recomputes per-chunk metadata for each fragment in the table. Updates and deletes can cause chunk met...
std::set< size_t > getFragmentIndexes(const TableDescriptor *td, const std::set< int > &fragment_ids) const
void vacuumFragments(const TableDescriptor *td, const std::set< int > &fragment_ids={}) const