diff --git a/sql/filesort.cc b/sql/filesort.cc index de7fc5475fb..c2d3985454c 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -346,8 +346,8 @@ SORT_INFO *filesort(THD *thd, TABLE *table, Filesort *filesort, if (param.tmp_buffer.alloc(param.sort_length)) goto err; - if (open_cached_file(&buffpek_pointers,mysql_tmpdir,TEMP_PREFIX, - DISK_BUFFER_SIZE, MYF(MY_WME))) + if (open_cached_file(&buffpek_pointers, mysql_tmpdir, TEMP_PREFIX, + DISK_CHUNK_SIZE, MYF(MY_WME))) goto err; param.sort_form= table; @@ -397,10 +397,10 @@ SORT_INFO *filesort(THD *thd, TABLE *table, Filesort *filesort, sort->buffpek.length= maxbuffer; buffpek= (Merge_chunk *) sort->buffpek.str; close_cached_file(&buffpek_pointers); - /* Open cached file if it isn't open */ + /* Open cached file if it isn't open */ if (! my_b_inited(outfile) && - open_cached_file(outfile,mysql_tmpdir,TEMP_PREFIX,READ_RECORD_BUFFER, - MYF(MY_WME))) + open_cached_file(outfile, mysql_tmpdir, TEMP_PREFIX, DISK_CHUNK_SIZE, + MYF(MY_WME))) goto err; if (reinit_io_cache(outfile,WRITE_CACHE,0L,0,0)) goto err; @@ -1065,7 +1065,7 @@ write_keys(Sort_param *param, SORT_INFO *fs_info, uint count, fs_info->sort_buffer(param, count); if (!my_b_inited(tempfile) && - open_cached_file(tempfile, mysql_tmpdir, TEMP_PREFIX, DISK_BUFFER_SIZE, + open_cached_file(tempfile, mysql_tmpdir, TEMP_PREFIX, DISK_CHUNK_SIZE, MYF(MY_WME))) DBUG_RETURN(1); /* purecov: inspected */ /* check we won't have more buffpeks than we can possibly keep in memory */ @@ -1647,8 +1647,8 @@ int merge_many_buff(Sort_param *param, Sort_buffer sort_buffer, if (*maxbuffer < MERGEBUFF2) DBUG_RETURN(0); /* purecov: inspected */ if (flush_io_cache(t_file) || - open_cached_file(&t_file2,mysql_tmpdir,TEMP_PREFIX,DISK_BUFFER_SIZE, - MYF(MY_WME))) + open_cached_file(&t_file2, mysql_tmpdir, TEMP_PREFIX, DISK_CHUNK_SIZE, + MYF(MY_WME))) DBUG_RETURN(1); /* purecov: inspected */ from_file= t_file ; to_file= &t_file2; diff --git a/sql/optimizer_costs.h b/sql/optimizer_costs.h index 2d737d8cf50..30033953021 100644 --- a/sql/optimizer_costs.h +++ b/sql/optimizer_costs.h @@ -172,7 +172,7 @@ static inline double cache_hit_ratio(uint ratio) #define HEAP_TEMPTABLE_LOOKUP_COST 0.05 #define HEAP_TEMPTABLE_CREATE_COST 1.0 #define DISK_TEMPTABLE_LOOKUP_COST 1.0 -#define DISK_TEMPTABLE_CREATE_COST 4.0 /* Creating and deleting 2 temp tables */ +#define DISK_TEMPTABLE_CREATE_COST TMPFILE_CREATE_COST*2 /* 2 tmp tables */ #define DISK_TEMPTABLE_BLOCK_SIZE 8192 #define SORT_INDEX_CMP_COST 0.02 diff --git a/sql/sql_const.h b/sql/sql_const.h index 9d92ef4f9da..59faf94dd15 100644 --- a/sql/sql_const.h +++ b/sql/sql_const.h @@ -119,14 +119,13 @@ #define CREATE_MODE 0 /* Default mode on new files */ #define NAMES_SEP_CHAR 255 /* Char to sep. names */ -#define READ_RECORD_BUFFER (uint) (IO_SIZE*8) /* Pointer_buffer_size */ -#define DISK_BUFFER_SIZE (uint) (IO_SIZE*16) /* Size of diskbuffer */ - /* - When reading big blocks, assume that each block of this size is - is of simlar cost as key lookup (1) + This is used when reading large blocks, sequential read. + We assume that reading this much will be the same cost as 1 seek / fetching + one row from the storage engine. */ -#define DISK_FAST_READ_SIZE ((uint) (IO_SIZE*16)) +#define DISK_CHUNK_SIZE (uint) (65536) /* Size of diskbuffer for tmpfiles */ +#define TMPFILE_CREATE_COST 2.0 /* Creating and deleting tmp file */ #define FRM_VER_TRUE_VARCHAR (FRM_VER+4) /* 10 */ #define FRM_VER_EXPRESSSIONS (FRM_VER+5) /* 11 */ diff --git a/sql/sql_update.cc b/sql/sql_update.cc index 2da95904419..45a7da787ad 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -840,8 +840,8 @@ int mysql_update(THD *thd, explain->buf_tracker.on_scan_init(); IO_CACHE tempfile; if (open_cached_file(&tempfile, mysql_tmpdir,TEMP_PREFIX, - DISK_BUFFER_SIZE, MYF(MY_WME))) - goto err; + DISK_CHUNK_SIZE, MYF(MY_WME))) + goto err; /* If quick select is used, initialize it before retrieving rows. */ if (select && select->quick && select->quick->reset()) diff --git a/sql/uniques.cc b/sql/uniques.cc index 974218011af..a09655bcaca 100644 --- a/sql/uniques.cc +++ b/sql/uniques.cc @@ -103,7 +103,7 @@ Unique::Unique(qsort_cmp2 comp_func, void * comp_func_fixed_arg, if (!max_elements) max_elements= 1; - (void) open_cached_file(&file, mysql_tmpdir,TEMP_PREFIX, DISK_BUFFER_SIZE, + (void) open_cached_file(&file, mysql_tmpdir, TEMP_PREFIX, DISK_CHUNK_SIZE, MYF(MY_WME)); } @@ -716,7 +716,7 @@ bool Unique::merge(TABLE *table, uchar *buff, size_t buff_size, /* Open cached file for table records if it isn't open */ if (! my_b_inited(outfile) && - open_cached_file(outfile,mysql_tmpdir,TEMP_PREFIX,READ_RECORD_BUFFER, + open_cached_file(outfile, mysql_tmpdir, TEMP_PREFIX, DISK_CHUNK_SIZE, MYF(MY_WME))) return 1;