summaryrefslogtreecommitdiff
path: root/include/my_dir.h
diff options
context:
space:
mode:
authorunknown <dlenev@mysql.com>2003-12-12 03:39:29 +0300
committerunknown <dlenev@mysql.com>2003-12-12 03:39:29 +0300
commitc545b02645cbc09e33a211955a8dbcc09a994b77 (patch)
tree27e4c621a8cb1797bd140a3d7b363f4e2eb8629c /include/my_dir.h
parent22c12eaeb296b55d6121531bea44a97fb5297f04 (diff)
downloadmariadb-git-c545b02645cbc09e33a211955a8dbcc09a994b77.tar.gz
Fix for Bug #1952
"SHOW TABLE STATUS very slow w/large number of tables" Replaced old algorithm which were used in my_dir() and stored all information about directory entries in one chunk of memory with new one which stores file names and MY_STAT structures in separate memroot, so now we don't need to copy this data during reallocation of dir_entry array. include/my_dir.h: Changed mystat member of FILEINFO structure to pointer since this prevents unneeded memory allocation and initialization. Added comment about new hidden members of MY_DIR structure. mysys/my_lib.c: Replaced old algorithm in my_dir() which stored all information about directory entries in one chunk of memory with new one which stores file names and MY_STAT structures in separate memroot. Now we don't copy this data during reallocation of array with FILEINFO structures. Also tuned sizes of memory chunks during first-other reallocations (we suppose that we either have < 100 files in the directory or > 1000 of them). sql/sql_show.cc: Updated only place in code where mystat member of FILEINFO structure is used.
Diffstat (limited to 'include/my_dir.h')
-rw-r--r--include/my_dir.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/include/my_dir.h b/include/my_dir.h
index 4ccda050914..851b6d8d7e9 100644
--- a/include/my_dir.h
+++ b/include/my_dir.h
@@ -74,14 +74,21 @@ typedef struct my_stat
#endif /* USE_MY_STAT_STRUCT */
-typedef struct fileinfo /* Struct returned from my_dir & my_stat */
+/* Struct describing one file returned from my_dir */
+typedef struct fileinfo
{
char *name;
- MY_STAT mystat;
+ MY_STAT *mystat;
} FILEINFO;
typedef struct st_my_dir /* Struct returned from my_dir */
{
+ /*
+ These members are just copies of parts of DYNAMIC_ARRAY structure,
+ which is allocated right after the end of MY_DIR structure (MEM_ROOT
+ for storing names is also resides there). We've left them here because
+ we don't want to change code that uses my_dir.
+ */
struct fileinfo *dir_entry;
uint number_off_files;
} MY_DIR;