Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
c4cb6175
G
Gpdb
项目概览
Greenplum
/
Gpdb
通知
7
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gpdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c4cb6175
编写于
8月 24, 1997
作者:
B
Bruce Momjian
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Major patch to speed up backend startup after profiling analysis.
上级
281ba3f4
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
122 addition
and
198 deletion
+122
-198
src/backend/access/common/heaptuple.c
src/backend/access/common/heaptuple.c
+14
-20
src/backend/access/common/heapvalid.c
src/backend/access/common/heapvalid.c
+5
-2
src/backend/storage/ipc/s_lock.c
src/backend/storage/ipc/s_lock.c
+38
-86
src/backend/storage/page/bufpage.c
src/backend/storage/page/bufpage.c
+1
-63
src/backend/utils/adt/oid.c
src/backend/utils/adt/oid.c
+5
-1
src/backend/utils/cache/catcache.c
src/backend/utils/cache/catcache.c
+14
-3
src/backend/utils/mmgr/oset.c
src/backend/utils/mmgr/oset.c
+5
-15
src/include/c.h
src/include/c.h
+2
-3
src/include/storage/bufpage.h
src/include/storage/bufpage.h
+38
-5
未找到文件。
src/backend/access/common/heaptuple.c
浏览文件 @
c4cb6175
...
...
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.
19 1997/08/19 21:28:49
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.
20 1997/08/24 23:07:26
momjian Exp $
*
* NOTES
* The old interface functions have been converted to macros
...
...
@@ -695,26 +695,20 @@ heap_getattr(HeapTuple tup,
if
(
attnum
>
(
int
)
tup
->
t_natts
)
{
*
isnull
=
true
;
return
((
char
*
)
NULL
);
}
else
if
(
attnum
>
0
)
{
/* ----------------
* take care of user defined attributes
* ----------------
*/
return
fastgetattr
(
tup
,
attnum
,
tupleDesc
,
isnull
);
}
else
{
/* ----------------
* take care of system attributes
* ----------------
*/
*
isnull
=
false
;
return
heap_getsysattr
(
tup
,
b
,
attnum
);
}
/* ----------------
* take care of user defined attributes
* ----------------
*/
if
(
attnum
>
0
)
{
char
*
datum
;
datum
=
fastgetattr
(
tup
,
attnum
,
tupleDesc
,
isnull
);
return
(
datum
);
}
/* ----------------
* take care of system attributes
* ----------------
*/
*
isnull
=
false
;
return
heap_getsysattr
(
tup
,
b
,
attnum
);
}
/* ----------------
...
...
src/backend/access/common/heapvalid.c
浏览文件 @
c4cb6175
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/common/Attic/heapvalid.c,v 1.1
3 1997/03/28 07:03:53 scrappy
Exp $
* $Header: /cvsroot/pgsql/src/backend/access/common/Attic/heapvalid.c,v 1.1
4 1997/08/24 23:07:26 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -22,6 +22,7 @@
#include <utils/rel.h>
#include <utils/tqual.h>
#include <storage/bufmgr.h>
#include <utils/builtins.h>
/* ----------------
* heap_keytest
...
...
@@ -53,7 +54,9 @@ heap_keytest(HeapTuple t,
return
(
false
);
}
if
(
keys
->
sk_flags
&
SK_COMMUTE
)
if
(
keys
->
sk_func
==
(
func_ptr
)
oideq
)
/* optimization */
test
=
(
keys
->
sk_argument
==
atp
);
else
if
(
keys
->
sk_flags
&
SK_COMMUTE
)
test
=
(
long
)
FMGR_PTR2
(
keys
->
sk_func
,
keys
->
sk_procedure
,
keys
->
sk_argument
,
atp
);
else
...
...
src/backend/storage/ipc/s_lock.c
浏览文件 @
c4cb6175
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/ipc/Attic/s_lock.c,v 1.
19 1997/08/20 00:50:11 scrappy
Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/ipc/Attic/s_lock.c,v 1.
20 1997/08/24 23:07:28 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -44,12 +44,6 @@
#if defined(HAS_TEST_AND_SET)
# if defined(__alpha__) && defined(linux)
static
long
int
tas
(
slock_t
*
lock
);
# else
static
int
tas
(
slock_t
*
lock
);
#endif
#if defined (nextstep)
/*
* NEXTSTEP (mach)
...
...
@@ -167,6 +161,8 @@ S_LOCK_FREE(slock_t *lock)
defined(sparc_solaris)
/* for xxxxx_solaris, this is defined in port/.../tas.s */
static
int
tas
(
slock_t
*
lock
);
void
S_LOCK
(
slock_t
*
lock
)
{
...
...
@@ -233,6 +229,8 @@ S_INIT_LOCK(slock_t *lock)
*/
static
slock_t
clear_lock
=
{
-
1
,
-
1
,
-
1
,
-
1
};
static
int
tas
(
slock_t
*
lock
);
void
S_LOCK
(
slock_t
*
lock
)
{
...
...
@@ -268,6 +266,8 @@ S_LOCK_FREE(slock_t *lock)
#if defined(sun3)
static
int
tas
(
slock_t
*
lock
);
void
S_LOCK
(
slock_t
*
lock
)
{
...
...
@@ -320,6 +320,8 @@ tas_dummy()
#define asm(x) __asm__(x)
#endif
static
int
tas
(
slock_t
*
lock
);
static
int
tas_dummy
()
{
...
...
@@ -383,19 +385,14 @@ S_INIT_LOCK(unsigned char *addr)
#if defined(NEED_I386_TAS_ASM)
static
int
tas
(
slock_t
*
m
)
{
slock_t
res
;
__asm__
(
"xchgb %0,%1"
:
"=q"
(
res
),
"=m"
(
*
m
)
:
"0"
(
0x1
));
return
(
res
);
}
void
S_LOCK
(
slock_t
*
lock
)
{
while
(
tas
(
lock
))
;
slock_t
res
;
do
{
__asm__
(
"xchgb %0,%1"
:
"=q"
(
res
),
"=m"
(
*
lock
)
:
"0"
(
0x1
));
}
while
(
res
!=
0
);
}
void
...
...
@@ -415,31 +412,26 @@ S_INIT_LOCK(slock_t *lock)
#if defined(__alpha__) && defined(linux)
static
long
int
tas
(
slock_t
*
m
)
{
slock_t
res
;
__asm__
(
" ldq $0, %0
\n
\
bne $0, already_set
\n
\
ldq_l $0, %0
\n
\
bne $0, already_set
\n
\
or $31, 1, $0
\n
\
stq_c $0, %0
\n
\
beq $0, stqc_fail
\n
\
success: bis $31, $31, %1
\n
\
mb
\n
\
jmp $31, end
\n
\
stqc_fail: or $31, 1, $0
\n
\
already_set: bis $0, $0, %1
\n
\
end: nop "
:
"=m"
(
*
m
),
"=r"
(
res
)
::
"0"
);
return
(
res
);
}
void
S_LOCK
(
slock_t
*
lock
)
{
while
(
tas
(
lock
))
;
slock_t
res
;
do
{
__asm__
(
" ldq $0, %0
\n
\
bne $0, already_set
\n
\
ldq_l $0, %0
\n
\
bne $0, already_set
\n
\
or $31, 1, $0
\n
\
stq_c $0, %0
\n
\
beq $0, stqc_fail
\n
\
success: bis $31, $31, %1
\n
\
mb
\n
\
jmp $31, end
\n
\
stqc_fail: or $31, 1, $0
\n
\
already_set: bis $0, $0, %1
\n
\
end: nop "
:
"=m"
(
*
lock
),
"=r"
(
res
)
::
"0"
);
}
while
(
res
!=
0
);
}
void
...
...
@@ -459,56 +451,16 @@ S_INIT_LOCK(slock_t *lock)
#if defined(linux) && defined(sparc)
static
int
tas
(
slock_t
*
m
)
{
slock_t
res
;
__asm__
(
"ldstub [%1], %0"
:
"=&r"
(
res
)
:
"r"
(
m
));
return
(
res
!=
0
);
}
void
S_LOCK
(
slock_t
*
lock
)
{
while
(
tas
(
lock
))
;
}
void
S_UNLOCK
(
slock_t
*
lock
)
{
*
lock
=
0
;
}
void
S_INIT_LOCK
(
slock_t
*
lock
)
{
S_UNLOCK
(
lock
);
}
#endif
/* defined(linux) && defined(sparc) */
#if defined(NEED_NS32K_TAS_ASM)
static
int
tas
(
slock_t
*
m
)
{
slock_t
res
=
0
;
__asm__
(
"movd 8(fp), r1"
);
__asm__
(
"movqd 0, r0"
);
__asm__
(
"sbitd r0, 0(r1)"
);
__asm__
(
"sprb us, %0"
:
"=r"
(
res
));
res
=
(
res
>>
5
)
&
1
;
return
res
;
}
slock_t
res
;
void
S_LOCK
(
slock_t
*
lock
)
{
while
(
tas
(
lock
))
;
do
{
__asm__
(
"ldstub [%1], %0"
:
"=&r"
(
res
)
:
"r"
(
lock
));
}
while
(
!
res
!=
0
)
;
}
void
...
...
@@ -523,7 +475,7 @@ S_INIT_LOCK(slock_t *lock)
S_UNLOCK
(
lock
);
}
#endif
/*
NEED_NS32K_TAS_ASM
*/
#endif
/*
defined(linux) && defined(sparc)
*/
#if defined(linux) && defined(PPC)
...
...
src/backend/storage/page/bufpage.c
浏览文件 @
c4cb6175
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.
7 1997/08/19 21:33:33
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.
8 1997/08/24 23:07:30
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -31,43 +31,6 @@ static void PageIndexTupleDeleteAdjustLinePointers(PageHeader phdr,
static
bool
PageManagerShuffle
=
true
;
/* default is shuffle mode */
/* ----------------------------------------------------------------
* Buffer support functions
* ----------------------------------------------------------------
*/
/*
* BufferGetPageSize --
* Returns the page size within a buffer.
*
* Notes:
* Assumes buffer is valid.
*
* The buffer can be a raw disk block and need not contain a valid
* (formatted) disk page.
*/
Size
BufferGetPageSize
(
Buffer
buffer
)
{
Size
pageSize
;
Assert
(
BufferIsValid
(
buffer
));
pageSize
=
BLCKSZ
;
/* XXX dig out of buffer descriptor */
Assert
(
PageSizeIsValid
(
pageSize
));
return
(
pageSize
);
}
/*
* BufferGetPage --
* Returns the page associated with a buffer.
*/
Page
BufferGetPage
(
Buffer
buffer
)
{
return
(
Page
)
BufferGetBlock
(
buffer
);
}
/* ----------------------------------------------------------------
* Page support functions
* ----------------------------------------------------------------
...
...
@@ -94,31 +57,6 @@ PageInit(Page page, Size pageSize, Size specialSize)
PageSetPageSize
(
page
,
pageSize
);
}
/*
* PageGetItem --
* Retrieves an item on the given page.
*
* Note:
* This does change the status of any of the resources passed.
* The semantics may change in the future.
*/
Item
PageGetItem
(
Page
page
,
ItemId
itemId
)
{
Item
item
;
Assert
(
PageIsValid
(
page
));
/* Assert(itemId->lp_flags & LP_USED); */
if
(
!
(
itemId
->
lp_flags
&
LP_USED
))
{
elog
(
NOTICE
,
"LP_USED assertion failed. dumping core."
);
abort
();
}
item
=
(
Item
)(((
char
*
)
page
)
+
itemId
->
lp_off
);
return
(
item
);
}
/*
* PageAddItem --
* Adds item to the given page.
...
...
src/backend/utils/adt/oid.c
浏览文件 @
c4cb6175
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/oid.c,v 1.
7 1997/07/24 20:16:17
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/adt/oid.c,v 1.
8 1997/08/24 23:07:35
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -96,6 +96,10 @@ char *oidout(Oid o)
* PUBLIC ROUTINES *
*****************************************************************************/
/*
* If you change this function, change heap_keytest()
* because we have hardcoded this in there as an optimization
*/
bool
oideq
(
Oid
arg1
,
Oid
arg2
)
{
return
(
arg1
==
arg2
);
...
...
src/backend/utils/cache/catcache.c
浏览文件 @
c4cb6175
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.
7 1997/08/19 21:34:58
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.
8 1997/08/24 23:07:42
momjian Exp $
*
* Notes:
* XXX This needs to use exception.h to handle recovery when
...
...
@@ -656,8 +656,19 @@ InitSysCache(char *relname,
* and the LRU tuple list
* ----------------
*/
for
(
i
=
0
;
i
<=
NCCBUCK
;
++
i
)
{
cp
->
cc_cache
[
i
]
=
DLNewList
();
{
/*
* We can only do this optimization because the number of hash
* buckets never changes. Without it, we call malloc() too much.
* We could move this to dllist.c, but the way we do this is not
* dynamic/portabl, so why allow other routines to use it.
*/
void
*
cache_begin
=
malloc
((
NCCBUCK
+
1
)
*
sizeof
(
Dllist
));
for
(
i
=
0
;
i
<=
NCCBUCK
;
++
i
)
{
cp
->
cc_cache
[
i
]
=
cache_begin
+
i
*
sizeof
(
Dllist
);
cp
->
cc_cache
[
i
]
->
dll_head
=
0
;
cp
->
cc_cache
[
i
]
->
dll_tail
=
0
;
}
}
cp
->
cc_lrulist
=
DLNewList
();
...
...
src/backend/utils/mmgr/oset.c
浏览文件 @
c4cb6175
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/Attic/oset.c,v 1.
2 1997/08/19 21:35:59
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/Attic/oset.c,v 1.
3 1997/08/24 23:07:50
momjian Exp $
*
* NOTE
* XXX This is a preliminary implementation which lacks fail-fast
...
...
@@ -20,7 +20,6 @@
#include "utils/memutils.h"
/* where declarations of this file goes */
static
Pointer
OrderedElemGetBase
(
OrderedElem
elem
);
static
void
OrderedElemInit
(
OrderedElem
elem
,
OrderedSet
set
);
static
void
OrderedElemPush
(
OrderedElem
elem
);
static
void
OrderedElemPushHead
(
OrderedElem
elem
);
...
...
@@ -49,18 +48,6 @@ OrderedSetInit(OrderedSet set, Offset offset)
set
->
offset
=
offset
;
}
/*
* OrderedElemInit --
*/
static
void
OrderedElemInit
(
OrderedElem
elem
,
OrderedSet
set
)
{
elem
->
set
=
set
;
/* mark as unattached */
elem
->
next
=
NULL
;
elem
->
prev
=
NULL
;
}
/*
* OrderedSetContains --
* True iff ordered set contains given element.
...
...
@@ -148,7 +135,10 @@ OrderedElemPop(OrderedElem elem)
void
OrderedElemPushInto
(
OrderedElem
elem
,
OrderedSet
set
)
{
OrderedElemInit
(
elem
,
set
);
elem
->
set
=
set
;
/* mark as unattached */
elem
->
next
=
NULL
;
elem
->
prev
=
NULL
;
OrderedElemPush
(
elem
);
}
...
...
src/include/c.h
浏览文件 @
c4cb6175
...
...
@@ -7,7 +7,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: c.h,v 1.1
4 1997/08/12 20:16:17
momjian Exp $
* $Id: c.h,v 1.1
5 1997/08/24 23:07:56
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -686,8 +686,7 @@ typedef struct Exception {
* Does string copy, and forces terminating NULL
*/
/* we do this so if the macro is used in an if action, it will work */
#define strNcpy(dest,src,len) do \
{strncpy((dest),(src),(len));*((dest) + (len)) = '\0';} while (0)
#define strNcpy(dst,src,len) (strncpy((dst),(src),(len)),*((dst)+(len))='\0',dst)
/* ----------------------------------------------------------------
* Section 9: externs
...
...
src/include/storage/bufpage.h
浏览文件 @
c4cb6175
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: bufpage.h,v 1.
8 1997/08/19 21:39:47
momjian Exp $
* $Id: bufpage.h,v 1.
9 1997/08/24 23:08:01
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -233,17 +233,50 @@ typedef enum {
#define PageGetSpecialPointer(page) \
(AssertMacro(PageIsValid(page)) ? \
(char *) ((char *) (page) + ((PageHeader) (page))->pd_special) \
: (char *)
0
)
: (char *)
0
)
/*
* PageGetItem --
* Retrieves an item on the given page.
*
* Note:
* This does change the status of any of the resources passed.
* The semantics may change in the future.
*/
#define PageGetItem(page, itemId) \
(AssertMacro(PageIsValid(page)) ? \
AssertMacro(itemId->lp_flags & LP_USED) ? \
(Item)(((char *)page) + itemId->lp_off) : false : false)
/*
* BufferGetPageSize --
* Returns the page size within a buffer.
*
* Notes:
* Assumes buffer is valid.
*
* The buffer can be a raw disk block and need not contain a valid
* (formatted) disk page.
*/
/* XXX dig out of buffer descriptor */
#define BufferGetPageSize(buffer) \
(AssertMacro(BufferIsValid(buffer)) ? \
AssertMacro(PageSizeIsValid(pageSize)) ? \
((Size)BLCKSZ) : false : false)
/*
* BufferGetPage --
* Returns the page associated with a buffer.
*/
#define BufferGetPage(buffer) ((Page)BufferGetBlock(buffer))
/* ----------------------------------------------------------------
* extern declarations
* ----------------------------------------------------------------
*/
extern
Size
BufferGetPageSize
(
Buffer
buffer
);
extern
Page
BufferGetPage
(
Buffer
buffer
);
extern
void
PageInit
(
Page
page
,
Size
pageSize
,
Size
specialSize
);
extern
Item
PageGetItem
(
Page
page
,
ItemId
itemId
);
extern
OffsetNumber
PageAddItem
(
Page
page
,
Item
item
,
Size
size
,
OffsetNumber
offsetNumber
,
ItemIdFlags
flags
);
extern
Page
PageGetTempPage
(
Page
page
,
Size
specialSize
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录