Commit graph

19 commits

Author SHA1 Message Date
Varun Gupta
69d7bfd970 MDEV-17023: Crash during read_histogram_for_table with optimizer_use_condition_selectivity set to 4
No need to read statistics for tables that are not USER tables.
We allocate memory for structures to collect statistics only for USER TABLES.
2018-08-27 12:21:26 +03:00
Igor Babaev
1fd84f9129 MDEV-16760 CREATE OR REPLACE TABLE never updates statistical tables
If the command CREATE OR REPLACE TABLE really replaces a table then
it should remove all data on this table from all statistical tables.
2018-07-13 23:03:57 -07:00
Igor Babaev
c89bb15c31 MDEV-16757 Memory leak after adding manually min/max statistical data
for blob column

ANALYZE TABLE <table> does not collect statistical data on min/max values
for BLOB columns of <table>. However these values can be added into
mysql.column_stats manually by executing proper statements.
Unfortunately this led to a memory leak because the memory allocated
for these values was never freed.
This patch provides the server with a function to free memory allocated
for min/max statistical values of BLOB types.
2018-07-13 17:48:45 -07:00
Varun Gupta
ad9d1e8c3f MDEV-16552: [10.0] ASAN global-buffer-overflow in is_stat_table / statistics_for_tables_is_needed
Backport the fix f214d36512 to 10.0

   Author: Sergei Golubchik <serg@mariadb.org>
   Date:   Tue Apr 17 00:44:34 2018 +0200

    ASAN error in is_stat_table()

    don't memcmp beyond the first argument's end

    Also: use my_strcasecmp(table_alias_charset), like elsewhere, not memcmp
2018-07-11 15:22:04 +05:30
Sergei Petrunia
f91798dd1c MDEV-7370: Server deadlocks on renaming a table for which persistent statistics exists
RENAME TABLE code tries to update EITS statistics. It hung, because
it used an index on (db_name,table_name) to find the table, and attempted
to update these values at the same time. The fix is do what SQL UPDATE
statement does when updating index that it's used for scanning:
- First, buffer the rowids of rows to be updated,
- then make the second pass to actually update the rows

Also fixed the call to rename_table_in_stat_tables() in sql_rename.cc
to pass the correct new database (before, it passed old db_name so cross-
database renames were not handled correctly).

Variant #2, with review feedback addressed.
2015-11-18 21:31:45 +03:00
Igor Babaev
96f8058a7c Fixed bug mdev-5204.
Always use the value of table::file->stats.records when checking
whether a table with HA_STATS_RECORDS_IS_EXACT flag contains not
more than 1 record.
2013-11-27 09:06:34 -08:00
Igor Babaev
b110132516 Changed the names of the system tables for statistical data:
table_stat  -> table_stats
  column_stat -> column_stats
  index_stat  -> index_stats
to be in line with the names of innodb statistical tables 
from mysql-5.6: innodb_table_stats and innodb_index_stats.
2012-12-05 00:31:05 -08:00
Igor Babaev
2bbcec4148 Fixed bug mdev-518.
If some statistical tables are corrupted the server should use
the conventional statistical data.
2012-09-11 22:36:04 -07:00
Igor Babaev
d0ad93fbc7 Fixed bug mdev-487.
The function collect_statistics_for_table() when scanning a table
did not take into account that the handler function ha_rnd_next
could return the code HA_ERR_RECORD_DELETE that should not be
considered as an indication of an error.
Also fixed a potential memory leak in this function.
2012-08-27 14:19:25 -07:00
Igor Babaev
f4631d6f71 Fixed bug mdev-473.
With the new code of mysql-5.5 for metadata locking the function
unlock_tables_n_open_system_tables_for_write should not explicitly
unlock tables for which external locks have been set and should not
explicitly reset thd->lock to 0.
2012-08-23 11:22:26 -07:00
Igor Babaev
85db02984f Fixed bug mdev-464.
The value of system variable use_stat_tables was always reset to 0 ('never') 
by mistake at the launch of the server.
2012-08-17 13:23:49 -07:00
Igor Babaev
6eace757e9 Moved the test cases for parallel execution from stat_tables.test
into a separate file stat_tables_par.test because the test cases
could not be run with embedded server.
2012-07-27 17:33:23 -07:00
Igor Babaev
26947f5adb Added missing declaration of statistics_lock.
Replaced bzero with memset.
Added missing --source include/have_debug_sync.inc into stat_tables.test.
2012-07-27 12:05:23 -07:00
Igor Babaev
8c499274da Performed re-factoring and re-structuring of the code for mwl#248:
- Moved the definitions of the classes to store data from persistent
    statistical tables into statistics.h, leaving in other internal 
    data structures only references to the corresponding objects.
  - Defined class Column_statistics_collected derived from the class
    Column_statistics. This is a helper class to collect statistics
    on columns.
  - Moved references to read statistics to TABLE SHARE, leaving the
    the reference to the collected statistics in TABLE.
 - Added a new clone method for the class Field allowing to clone
    fields attached to table shares. It was was used to create 
    fields for min/max values in the memory of the table share.
A lso:
  - Added procedures to allocate memory for statistical data in
    the table share memory and in table memory.
Also: 
  - Added a test case demonstrating how ANALYZE could work in parallel
    to collect statistics on different indexes of the same table.
  - Added a test two demonstrate how two connections working 
    simultaneously could allocate memory for statistical data in the 
    table share memory.
2012-07-26 17:50:08 -07:00
Igor Babaev
f549f495f7 Removed the server option --stat-tables.
Renamed the system variable optimizer_use_stat_tables to use_stat_tables.
This variable now has only 3 possible values:
'never', 'complementary', 'preferably'.
If the server has been launched with
--use-stat-tables='complementary'|'preferably'
then the statictics tables can be employed by the optimizer and by the
ANALYZE command.
2012-06-02 17:19:01 -07:00
Igor Babaev
9b79feba56 Fixed the bug that caused displaying incorrect values in
the column cardinality of the table information_schema.statistics.
2012-05-17 16:54:26 -07:00
Igor Babaev
2a1afc29f2 Inverted the option --skip-stat-tables for --stat-tables.
Set it to 0 by default.
Now only the tests that use persistent statistics tables require
starting the server with --stat-tables set on.
2012-05-08 16:42:55 -07:00
Igor Babaev
906c9a93a0 Supported extended keys when collecting and using persistent statistics. 2012-05-06 22:42:14 -07:00
Igor Babaev
1c0a89afcc The pilot implementation of mwl#250: Use the statistics from persistent
statistical tables instead of the statistics provided by engine.
2012-04-11 17:14:06 -07:00