IP Library Granted Patent US 9,430,390
Granted Patent B2
US 9,430,390 · App. 14/337,142 · Granted Aug 30, 2016

Core in-memory space and object management architecture in a traditional RDBMS supporting DW and OLTP applications

Inventors: Niloy Mukherjee (San Jose, CA); Amit Ganesh (San Jose, CA); Vineet Marwah (San Ramon, CA); Jesse Kamp (Castro Valley, CA)
Assignee: Oracle International Corporation
G06F12/0815G06F3/064G06F3/0604G06F3/065G06F3/0689G06F12/1018G06F15/78G06F17/30312G06F17/30315G06F17/30377G06F17/30477G06F17/30595G06F2003/0697G06F2212/1021G06F2212/1032G06F2212/2542G06F2212/313
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,430,390
App. No.
14/337,142
Granted
Aug 30, 2016
Kind
B2
Abstract

Techniques are provided for managing in-memory space and objects. In one embodiment, a set of in-memory objects are maintained within an area in volatile memory that is accessible to a database server. An in-memory object in this context includes a set of one or more in-memory segments where each respective in-memory segment includes a set of in-memory extents and each respective in-memory extent is a contiguous chunk of memory from the area in volatile memory that is accessible to the database server. The area in volatile memory is managed as a set of stripes, where each stripe is a contiguous chunk of in-memory extents. Stripe control blocks are used to locate free in-memory extents for allocation and registration with an in-memory segment.

Claims (120)

1. A method comprising:

maintaining, within an area in volatile memory that is accessible to a database server, a set of in-memory objects;

wherein each respective in-memory object within the set of in-memory objects includes a set of one or more in-memory segments;

wherein each respective in-memory segment in the set of one or more in-memory segments includes a set of in-memory extents;

wherein each respective in-memory extent in the set of in-memory extents is a contiguous chunk of memory from the area in volatile memory that is accessible to the database server; and

maintaining, within the area in volatile memory that is accessible to the database server, a set of stripe lists;

wherein each respective stripe list in the set of stripe lists includes a set of stripes;

wherein each respective stripe in the set of stripes includes a contiguous chunk of in-memory extents.

2. The method of claim 1 , further comprising:

receiving a request to store, in memory, data associated with a new in-memory object;

in response to receiving the request, searching the set of stripe lists for a set of unused in-memory extents that have not been allocated for an in-memory segment;

allocating the set of unused in-memory extents for at least one in-memory segment that is associated with the new in-memory object.

3. The method of claim 1 ,

wherein each respective stripe in the set of stripes includes a bitmap for determining free space within the stripe;

wherein each respective bit in the bitmap corresponds to a different in-memory extent in the respective stripe and indicates whether the corresponding in-memory extent is used by an in-memory segment from the set of one or more in-memory segments.

4. A method comprising:

maintaining, within an area in volatile memory that is accessible to a database server, a set of in-memory objects;

wherein each respective in-memory object within the set of in-memory objects includes a set of one or more in-memory segments;

wherein each respective in-memory segment in the set of one or more in-memory segments includes a set of in-memory extents;

wherein each respective in-memory extent in the set of in-memory extents is a contiguous chunk of memory from the area in volatile memory that is accessible to the database server; and

maintaining a plurality of pools of in-memory extents in the area in volatile memory, including a first pool and a second pool;

wherein, within each pool of the plurality of pools, all in-memory extents have a same fixed size;

wherein in-memory extents of the first pool differ in size from in-memory extents of the second pool.

5. The method of claim 4 , wherein

the first pool handles allocations of in-memory extents for in-memory compression units; and

the second pool handles allocation of in-memory extents for journal segments.

6. A method comprising:

maintaining, within an area in volatile memory that is accessible to a database server, a set of in-memory objects;

wherein each respective in-memory object within the set of in-memory objects:

is a table or a partition of a table, and

includes a set of one or more in-memory segments;

wherein each respective in-memory segment in the set of one or more in-memory segments includes a set of in-memory extents;

wherein each respective in-memory extent in the set of in-memory extents is a contiguous chunk of memory from the area in volatile memory that is accessible to the database server; and

wherein each in-memory segment in the set of one or more in-memory segments:

corresponds to and contains the same data as a respective on-disk segment; and

stores, in a mirror format, the data that the respective on-disk segment stores in a persistent format;

wherein the mirror format is different from the persistent format.

7. The method of claim 6 , further comprising:

for at least one in-memory extent in the set of in-memory extents, maintaining mapping data that maps:

(a) one or more on-disk ranges in persistent storage, to

(b) the at least one in-memory extent that corresponds to the one or more on-disk ranges.

8. The method of claim 7 , further comprising:

receiving a query that includes a scan operation to retrieve particular data from a particular on-disk range of the one or more on-disk ranges;

in response to receiving the query, determining, from the mapping data, a particular set of one or more in-memory extents that map the particular on-disk range;

scanning the particular set of one or more in-memory extents to retrieve the particular data.

9. The method of claim 6 , further comprising:

for each respective in-memory segment in the set of one or more in-memory segments:

converting particular data stored in the respective on-disk segment from the persistent format into the mirror format;

loading the particular data in the mirror format into a particular set of one or more in-memory extents;

registering the particular set of one or more in-memory extents with the respective in-memory segment.

10. A method comprising:

maintaining, within an area in volatile memory that is accessible to a database server, a set of in-memory objects;

wherein each respective in-memory object within the set of in-memory objects includes a set of one or more in-memory segments;

wherein each respective in-memory segment in the set of one or more in-memory segments includes a set of in-memory extents;

wherein each respective in-memory extent in the set of in-memory extents is a contiguous chunk of memory from the area in volatile memory that is accessible to the database server; and

determining that an on-disk segment that corresponds to a particular in-memory segment of the set of one or more in-memory segments has changed;

in response to determining that the on-disk segment has changed:

dropping the particular in-memory segment from the area in volatile memory;

re-allocating space from the area in volatile memory to generate a new in-memory segment corresponding to the on-disk segment; and

loading the new in-memory segment with data from the on-disk segment.

11. One or more non-transitory storage media storing instructions which, when executed by one or more processors, cause performance of:

maintaining, within an area in volatile memory that is accessible to a database server, a set of in-memory objects;

wherein each respective in-memory object within the set of in-memory objects includes a set of one or more in-memory segments;

wherein each respective in-memory segment in the set of one or more in-memory segments includes a set of in-memory extents;

wherein each respective in-memory extent in the set of in-memory extents is a contiguous chunk of memory from the area in volatile memory that is accessible to the database server; and

maintaining, within the area in volatile memory that is accessible to the database server, a set of stripe lists;

wherein each respective stripe list in the set of stripe lists includes a set of stripes;

wherein each respective stripe in the set of stripes includes a contiguous chunk of in-memory extents.

12. The one or more non-transitory storage media of claim 11 , further storing instructions that cause performance of:

receiving a request to store, in memory, data associated with a new in-memory object;

in response to receiving the request, searching the set of stripe lists for a set of unused in-memory extents that have not been allocated for an in-memory segment;

allocating the set of unused in-memory extents for at least one in-memory segment that is associated with the new in-memory object.

13. The one or more non-transitory storage media of claim 11 ,

wherein each respective stripe in the set of stripes includes a bitmap for determining free space within the stripe;

wherein each respective bit in the bitmap corresponds to a different in-memory extent in the respective stripe and indicates whether the corresponding in-memory extent is used by an in-memory segment from the set of one or more in-memory segments.

14. One or more non-transitory storage media, storing instructions which, when executed by one or more processors, cause performance of:

maintaining, within an area in volatile memory that is accessible to a database server, a set of in-memory objects;

wherein each respective in-memory object within the set of in-memory objects includes a set of one or more in-memory segments;

wherein each respective in-memory segment in the set of one or more in-memory segments includes a set of in-memory extents;

wherein each respective in-memory extent in the set of in-memory extents is a contiguous chunk of memory from the area in volatile memory that is accessible to the database server; and

maintaining a plurality of pools of in-memory extents in the area in volatile memory, including a first pool and a second pool;

wherein, within each pool of the plurality of pools, all in-memory extents have a same fixed size;

wherein in-memory extents of the first pool differ in size from in-memory extents of the second pool.

15. The one or more non-transitory storage media of claim 14 , wherein

the first pool handles allocations of in-memory extents for in-memory compression units; and

the second pool handles allocation of in-memory extents for journal segments.

16. One or more non-transitory storage media storing instructions which, when executed by one or more processors, cause performance of:

maintaining, within an area in volatile memory that is accessible to a database server, a set of in-memory objects;

wherein each respective in-memory object within the set of in-memory objects:

is a table or a partition of a table, and

includes a set of one or more in-memory segments;

wherein each respective in-memory segment in the set of one or more in-memory segments includes a set of in-memory extents;

wherein each respective in-memory extent in the set of in-memory extents is a contiguous chunk of memory from the area in volatile memory that is accessible to the database server; and

wherein each in-memory segment in the set of one or more in-memory segments:

corresponds to and contains the same data as a respective on-disk segment; and

stores, in a mirror format, the data that the respective on-disk segment stores in a persistent format;

wherein the mirror format is different from the persistent format.

17. The one or more non-transitory storage media of claim 16 , further storing instructions that cause performance of:

for at least one in-memory extent in the set of in-memory extents, maintaining mapping data that maps:

(a) one or more on-disk ranges in persistent storage, to

(b) the at least one in-memory extent that corresponds to the one or more on-disk ranges.

18. The one or more non-transitory storage media of claim 17 , further storing instructions that cause performance of:

receiving a query that includes a scan operation to retrieve particular data from a particular on-disk range of the one or more on-disk ranges;

in response to receiving the query, determining, from the mapping data, a particular set of one or more in-memory extents that map the particular on-disk range;

scanning the particular set of one or more in-memory extents to retrieve the particular data.

19. The one or more non-transitory storage media of claim 16 , further storing instructions that cause performance of:

for each respective in-memory segment in the set of one or more in-memory segments:

converting particular data stored in the respective on-disk segment from the persistent format into the mirror format;

loading the particular data in the mirror format into a particular set of one or more in-memory extents;

registering the particular set of one or more in-memory extents with the respective in-memory segment.

20. One or more non-transitory storage media storing instructions which, when executed by one or more processors, cause performance of:

maintaining, within an area in volatile memory that is accessible to a database server, a set of in-memory objects;

wherein each respective in-memory object within the set of in-memory objects includes a set of one or more in-memory segments;

wherein each respective in-memory segment in the set of one or more in-memory segments includes a set of in-memory extents;

wherein each respective in-memory extent in the set of in-memory extents is a contiguous chunk of memory from the area in volatile memory that is accessible to the database server; and

determining that an on-disk segment that corresponds to a particular in-memory segment of the set of one or more in-memory segments has changed;

in response to determining that the on-disk segment has changed:

dropping the particular in-memory segment from the area in volatile memory;

re-allocating space from the area in volatile memory to generate a new in-memory segment corresponding to the on-disk segment; and

loading the new in-memory segment with data from the on-disk segment.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 16, 2014
From: MUKHERJEE, NILOY; GANESH, AMIT; MARWAH, VINEET; KAMP, JESSE
To: ORACLE INTERNATIONAL CORPORATION
Reel/Frame 034514/0600 →
Continuity (2)
Provisional Application 61880852 · Sep 21, 2013
Related Publication 20150089134A1 · Mar 26, 2015