DETAILED ACTION
Notice of Pre-AIA or AIA Status
The present application, filed on or after March 16, 2013, is being examined under the first inventor to file provisions of the AIA .
Claims 1-20 are pending in this office action.
Response to Amendment
This Office Action is in response to applicant’s communication filed on January 14th, 2026. The applicant’s remark and amendments to the claims were considered with the results that follow.
In response to the last Office Action, claims 1, 10-11, and 19-20 have been amended. As a result, claims 1-20 are pending in this application.
Applicant’s argument filed on January 14th, 2026, with respect to claims 1-20 as being directed to being abstract idea have overcome the rejection. The rejection have been withdrawn due to the arguments filed on January 14th, 2026.
Response to Arguments
Applicant’s argument with respect to 35 U.S.C 101 rejection have been considered and the rejection has been withdrawn.
Applicant’s arguments with respect to claims 1, 11, and 20 have been considered but are moot because the new ground of rejection does not rely on any reference applied in the prior rejection of record for any teaching or matter specifically challenged in the argument.
Claim Rejections - 35 USC § 103
The following is a quotation of 35 U.S.C. 103 which forms the basis for all obviousness rejections set forth in this Office action:
A patent for a claimed invention may not be obtained, notwithstanding that the claimed invention is not identically disclosed as set forth in section 102, if the differences between the claimed invention and the prior art are such that the claimed invention as a whole would have been obvious before the effective filing date of the claimed invention to a person having ordinary skill in the art to which the claimed invention pertains. Patentability shall not be negated by the manner in which the invention was made.
Claims 1, 11, and 20 are rejected under 35 U.S.C. 103 as being unpatentable over U.S Patent Application Publication 2009/0094192 issued to Bestgen et al. (hereinafter as "Bestgen") in view of U.S Patent Application Publication 2009/0106219 issued to Belknap et al. (hereinafter as “Belknap”).
Regarding claim 1, Bestgen teaches a computer-implemented method, comprising: detecting performance regression of executing a query using a current query plan (Bestgen: [0020]; Some such methods also include setting a timer having a time relating to an expected execution time of a first query plan for executing the database query. The first query plan taking too long to complete can be determined at least in part by the timer timing out. [0071]; In step 414 a user job (500) begins to execute the DB query. The first time this user job attempts to execute a query, a queue (503) is created in step 416, which will receive runaway query messages, if any are generated. A timed message is created in step 418, and sent to a timer (508) in step 420. In the event there is a runaway query, indicated by the “N” branch from step 422, the timer message is not cancelled, indicated by arrival at step 426 {Examiner correlates detecting the performance regression based on the query plan taking too long based on determining that it performing worse than expected based on the timer});
responsive to detecting the performance regression, automatically generating an alternative query plan as a candidate solution for resolving the performance regression (Bestgen: [0019]; After detecting a problem query, the plan that is executing and resulting in the problem can have the risky construct identified and removed from future consideration to execute the current query. In response to a first selected plan taking too long to execute, the query can be re-costed, the currently running query cancelled, and a second plan selected and executed. [0082]; If there is a problem, the currently running plan can be re-costed or otherwise marked as risky or long running. The re-costing process in the query job can occur in a secondary thread so as not to interfere with the executing plan (to minimize disruption should the plan ultimately complete). During the re-costing process, potential plans that contain these constructs will either not be considered as part of the plan space or forced to be reconsidered, as applicable {Examiner correlates the automatically generating an alternative query plan based on the query being re-costed when there is problem with the current plan which is detecting a problem, thus, the second plan (candidate plan) is selected to utilized to resolve the issue});
automatically starting in a designated execution thread of a query processing engine to execute the query using the alternative query plan (Bestgen: [0018]; This secondary thread may also be referred to as a guardian thread or a maintenance thread. In some embodiments, this secondary thread is created only in response to the occurrence of a problem query. In this way, the overhead of creating the secondary thread is incurred only when needed, not for every query regardless of the existence of a problem. [0021]; Some methods also include executing a thread to supervise stopping the first query plan execution and the initiating the second query plan execution, where the thread is created responsive to the first query plan taking too long to complete {Examiner correlates the guardian thread or maintenance thread as the designated thread to manage the alternative query plan in case there is problem with the current first query plan});
monitoring an elapsed duration after starting the test execution session in a timer thread of the query processing engine, wherein the timer thread is independent of the designated execution thread (Bestgen: [0071]; The first time this user job attempts to execute a query, a queue (503) is created in step 416, which will receive runaway query messages, if any are generated. A timed message is created in step 418, and sent to a timer (508) in step 420. [0078]; If the timer expires, timer 508 has the ID of the queue to send the timed message to. So, timer 508 can send timed message 514 to system queue 510. As system job 512 was waiting on a receive, system job 512 wakes up, logs the received message to a log file, and pushes the (doit) method within message (object) 514, as indicated at 513 {Examiner correlates the monitoring the elapsed duration after starting based on the user job executing the query and a timer is started based on the timed message created. The timer thread being independent from the designated execution thread is based on the user job executing the query. The timer 508 is a separate entity that waits upon the execution of the query of the user. Once the timer expires the timer acts a separate job of system job 512 to handle the results in a log}); and
responsive to detecting that the elapsed duration exceeds a timeout value and the execution session has not been completed, automatically terminating an execution session in the designated execution thread (Bestgen: [0018]; This secondary thread may also be referred to as a guardian thread or a maintenance thread. In some embodiments, this secondary thread is created only in response to the occurrence of a problem query. In this way, the overhead of creating the secondary thread is incurred only when needed, not for every query regardless of the existence of a problem. [0076]; The message can be an object which includes instructions as to what to do should the timer expire. [0079], “The initial uses of events can be: (1) Tell the user job to spawn a guardian thread and interrogate the maintenance queue for a specific action to perform; (2) Tell the user job to conditionally (only if the current plan has not reached the point of no return) cancel the current SQL plan and restart the query using a new plan found in plan cache 534. [0083]; this plan still has a significant amount of processing to reach completion, the database engine can be interrupted so as to replace the current plan executable with the re-optimized plan executable and re-start the execution {Examiner correlates the detecting of the elapse time based on the plan taking to long based on a point of no return in such that the database engine can be interrupted and replace the current plan and re-start the execution}), wherein the timeout value is calculated based on a predetermined execution time for executing the query using the current query plan (Bestgen: [0076]; The time entered in the timer is related to the estimated completion time of the physical plan to be executed, in many embodiments. The timer may be the estimated completion time adjusted upward by a percentage and/or an absolute amount of time, depending on the embodiment. [0079]; The initial uses of events can be: (1) Tell the user job to spawn a guardian thread and interrogate the maintenance queue for a specific action to perform; (2) Tell the user job to conditionally (only if the current plan has not reached the point of no return) cancel the current SQL plan and restart the query using a new plan found in plan cache 534 {Examiner correlates the timeout calculated based on a predetermined execution time according to timer entered into the timer related to the estimated completion time of the plan to be executed. The timer has a estimated completion time adjusted upward based on how much has been completed}).
Although, Bestgen teaches a execution session in a designated execution thread (See Bestgen: [0018]; This secondary thread may also be referred to as a guardian thread or a maintenance thread. In some embodiments, this secondary thread is created only in response to the occurrence of a problem query. In this way, the overhead of creating the secondary thread is incurred only when needed, not for every query regardless of the existence of a problem). Bestgen does not explicitly teach a computer-implemented method for performing foreground testing for improved automatic performance regression management in database systems, comprising: a test execution session in a designated execution thread, and responsive to detecting that the test execution session has not been completed.
However, Belknap teaches a computer-implemented method for performing foreground testing for improved automatic performance regression management in database systems (Belknap: [0066]; the database server executes the first plan to determine performance statistics for the first plan. Based at least on the performance statistics, the database server determines to verify the first plan… The database server satisfies the second request by executing the database command according to the first plan, which is now verified. [0167]; query plan must be verified before it may be selected by the query optimizer. When a query optimizer predicts that a new plan will perform a database command better than any other plan, the query optimizer notes the new plan, but selects an older, verified plan for executing the database command. Subsequently, the query optimizer may verify the new plan by executing it, so as to determine whether or not the new plan performs as well as predicted (or, at least, better than other verified plan) {Examiner correlates the foreground testing as executing the unverified plan to determine the performance statistics to prevent performance issue when executing the query}),
a test execution session in a designated execution thread (Belknap: [0167]; Subsequently, the query optimizer may verify the new plan by executing it, so as to determine whether or not the new plan performs as well as predicted (or, at least, better than other verified plan). [0176]; In step 590, the database server attempts to verify the identified plan by executing it. [0181]-[0182]; The database server may automatically perform steps 590-596 for each query plan in each list of query plans that require verification as part of a periodically scheduled job. The database server may also perform steps 590-596 as a background process. According to an embodiment, verification may occur concurrently with the execution of a verified plan in response to the request for which a new plan was generated. The database server may run both of these plans concurrently {Examiner correlates the test execution session in the designated execution thread based on the plan being run on a separately based on the plans being run concurrently. One being the unverified plan being the test execution}) and responsive to detecting that the test execution session has not been completed (Belknap: [0066]-[0067]; The database server instead satisfies the first request by executing the database command according to a verified plan. Subsequent to satisfying the first request—for example as part of a periodically scheduled job—the database server executes the first plan to determine performance statistics for the first plan. Concurrently, the database server executes the database command according to a verified plan. If the first plan completes before the verified plan, the database server verifies the first plan. [0176]; In step 590, the database server attempts to verify the identified plan by executing it {Examiner correlates the test execution session not yet being completed based on attempts that the verifying the identified plan by executing it}).
It would have been obvious to a person of ordinary skill in the art, before the effective filing date of the invention, to modify Bestgen (teaches a computer-implemented method, comprising: detecting performance regression of executing a query using a current query plan; responsive to detecting the performance regression, automatically generating an alternative query plan as a candidate solution for resolving the performance regression; automatically starting in a designated execution thread of a query processing engine to execute the query using the alternative query plan; monitoring an elapsed duration after starting the test execution session in a timer thread of the query processing engine, wherein the timer thread is independent of the designated execution thread; and responsive to detecting that the elapsed duration exceeds a timeout value, wherein the timeout value is calculated based on a predetermined execution time for executing the query using the current query plan) with the teachings of Belknap (teaches a computer-implemented method for performing foreground testing for improved automatic performance regression management in database systems comprising a test execution session in a designated execution thread, and responsive to detecting that the test execution session has not been completed). One of ordinary skill in the art would have been motivated to make such a combination is modify the system of Bestgen’s detecting problem regression by generating a alternative plan to improve the perform to include Belknap’s test session execution method providing improvement to find a faster way to reduce the issue in the main system and utilizing a separate thread to verify to prevent any regression (See Belknap [0156]). In addition, the references (Bestgen and Belknap) teach features that are directed to analogous art and they are directed to the same field of endeavor as Bestgen and Belknap are directed to database system in which troubleshoot problems and provide a remedy accordingly.
Regarding claim 11, Bestgen teaches detecting performance regression of executing a query using a current query plan (Bestgen: [0020]; Some such methods also include setting a timer having a time relating to an expected execution time of a first query plan for executing the database query. The first query plan taking too long to complete can be determined at least in part by the timer timing out. [0071]; In step 414 a user job (500) begins to execute the DB query. The first time this user job attempts to execute a query, a queue (503) is created in step 416, which will receive runaway query messages, if any are generated. A timed message is created in step 418, and sent to a timer (508) in step 420. In the event there is a runaway query, indicated by the “N” branch from step 422, the timer message is not cancelled, indicated by arrival at step 426 {Examiner correlates detecting the performance regression based on the query plan taking too long based on determining that it performing worse than expected based on the timer});
responsive to detecting the performance regression, automatically generating an alternative query plan as a candidate solution for resolving the performance regression (Bestgen: [0019]; After detecting a problem query, the plan that is executing and resulting in the problem can have the risky construct identified and removed from future consideration to execute the current query. In response to a first selected plan taking too long to execute, the query can be re-costed, the currently running query cancelled, and a second plan selected and executed. [0082]; If there is a problem, the currently running plan can be re-costed or otherwise marked as risky or long running. The re-costing process in the query job can occur in a secondary thread so as not to interfere with the executing plan (to minimize disruption should the plan ultimately complete). During the re-costing process, potential plans that contain these constructs will either not be considered as part of the plan space or forced to be reconsidered, as applicable {Examiner correlates the automatically generating an alternative query plan based on the query being re-costed when there is problem with the current plan which is detecting a problem, thus, the second plan (candidate plan) is selected to utilized to resolve the issue});
automatically starting a execution session in a designated execution thread of a query processing engine to execute the query using the alternative query plan (Bestgen: [0018]; This secondary thread may also be referred to as a guardian thread or a maintenance thread. In some embodiments, this secondary thread is created only in response to the occurrence of a problem query. In this way, the overhead of creating the secondary thread is incurred only when needed, not for every query regardless of the existence of a problem. [0021]; Some methods also include executing a thread to supervise stopping the first query plan execution and the initiating the second query plan execution, where the thread is created responsive to the first query plan taking too long to complete {Examiner correlates the guardian thread or maintenance thread as the designated thread to manage the alternative query plan in case there is problem with the current first query plan});
monitoring an elapsed duration after starting the test execution session in a timer thread of the query processing engine, wherein the timer thread is independent of the designated execution thread (Bestgen: [0071]; The first time this user job attempts to execute a query, a queue (503) is created in step 416, which will receive runaway query messages, if any are generated. A timed message is created in step 418, and sent to a timer (508) in step 420. [0078]; If the timer expires, timer 508 has the ID of the queue to send the timed message to. So, timer 508 can send timed message 514 to system queue 510. As system job 512 was waiting on a receive, system job 512 wakes up, logs the received message to a log file, and pushes the (doit) method within message (object) 514, as indicated at 513 {Examiner correlates the monitoring the elapsed duration after starting based on the user job executing the query and a timer is started based on the timed message created. The timer thread being independent from the designated execution thread is based on the user job executing the query. The timer 508 is a separate entity that waits upon the execution of the query of the user. Once the timer expires the timer acts a separate job of system job 512 to handle the results in a log}); and
responsive to detecting that the elapsed duration exceeds a timeout value and has not been completed, automatically terminating an execution session in the designated execution thread (Bestgen: [0018]; This secondary thread may also be referred to as a guardian thread or a maintenance thread. In some embodiments, this secondary thread is created only in response to the occurrence of a problem query. In this way, the overhead of creating the secondary thread is incurred only when needed, not for every query regardless of the existence of a problem. [0076]; The message can be an object which includes instructions as to what to do should the timer expire. [0079], “The initial uses of events can be: (1) Tell the user job to spawn a guardian thread and interrogate the maintenance queue for a specific action to perform; (2) Tell the user job to conditionally (only if the current plan has not reached the point of no return) cancel the current SQL plan and restart the query using a new plan found in plan cache 534. [0083]; this plan still has a significant amount of processing to reach completion, the database engine can be interrupted so as to replace the current plan executable with the re-optimized plan executable and re-start the execution {Examiner correlates the detecting of the elapse time based on the plan taking to long based on a point of no return in such that the database engine can be interrupted and replace the current plan and re-start the execution}), wherein the timeout value is calculated based on a predetermined execution time for executing the query using the current query plan (Bestgen: [0076]; The time entered in the timer is related to the estimated completion time of the physical plan to be executed, in many embodiments. The timer may be the estimated completion time adjusted upward by a percentage and/or an absolute amount of time, depending on the embodiment. [0079]; The initial uses of events can be: (1) Tell the user job to spawn a guardian thread and interrogate the maintenance queue for a specific action to perform; (2) Tell the user job to conditionally (only if the current plan has not reached the point of no return) cancel the current SQL plan and restart the query using a new plan found in plan cache 534 {Examiner correlates the timeout calculated based on a predetermined execution time according to timer entered into the timer related to the estimated completion time of the plan to be executed. The timer has a estimated completion time adjusted upward based on how much has been completed}).
Although, Bestgen teaches a execution session in a designated execution thread (See Bestgen: [0018]; This secondary thread may also be referred to as a guardian thread or a maintenance thread. In some embodiments, this secondary thread is created only in response to the occurrence of a problem query. In this way, the overhead of creating the secondary thread is incurred only when needed, not for every query regardless of the existence of a problem). Bestgen does not explicitly teach a computer-implemented method for performing foreground testing for improved automatic performance regression management in database systems, comprising: memory; one or more hardware processors coupled to the memory; and one or more computer readable storage media storing instructions that, when loaded into the memory, cause the one or more hardware processors to perform operations comprising: a test execution session in a designated execution thread, and responsive to detecting that the test execution session has not been completed.
However, Belknap teaches a computing system for performing foreground testing for improved automatic performance regression management in database systems (Belknap: [0066]; the database server executes the first plan to determine performance statistics for the first plan. Based at least on the performance statistics, the database server determines to verify the first plan… The database server satisfies the second request by executing the database command according to the first plan, which is now verified. [0167]; query plan must be verified before it may be selected by the query optimizer. When a query optimizer predicts that a new plan will perform a database command better than any other plan, the query optimizer notes the new plan, but selects an older, verified plan for executing the database command. Subsequently, the query optimizer may verify the new plan by executing it, so as to determine whether or not the new plan performs as well as predicted (or, at least, better than other verified plan)), comprising: memory; one or more hardware processors coupled to the memory (Belknap: [0207]; Computer system 700 also includes a main memory 706, such as a random access memory (RAM) or other dynamic storage device, coupled to bus 702 for storing information and instructions to be executed by processor 704); and one or more computer readable storage media storing instructions that, when loaded into the memory, cause the one or more hardware processors to perform operations comprising (Belknap: [0207]; Computer system 700 also includes a main memory 706, such as a random access memory (RAM) or other dynamic storage device, coupled to bus 702 for storing information and instructions to be executed by processor 704. Main memory 706 also may be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor 704): a test execution session in a designated execution thread (Belknap: [0167]; Subsequently, the query optimizer may verify the new plan by executing it, so as to determine whether or not the new plan performs as well as predicted (or, at least, better than other verified plan). [0176]; In step 590, the database server attempts to verify the identified plan by executing it. [0181]-[0182]; The database server may automatically perform steps 590-596 for each query plan in each list of query plans that require verification as part of a periodically scheduled job. The database server may also perform steps 590-596 as a background process. According to an embodiment, verification may occur concurrently with the execution of a verified plan in response to the request for which a new plan was generated. The database server may run both of these plans concurrently {Examiner correlates the test execution session in the designated execution thread based on the plan being run on a separately based on the plans being run concurrently. One being the unverified plan being the test execution}) and responsive to detecting that the test execution session has not been completed (Belknap: [0066]-[0067]; The database server instead satisfies the first request by executing the database command according to a verified plan. Subsequent to satisfying the first request—for example as part of a periodically scheduled job—the database server executes the first plan to determine performance statistics for the first plan. Concurrently, the database server executes the database command according to a verified plan. If the first plan completes before the verified plan, the database server verifies the first plan. [0176]; In step 590, the database server attempts to verify the identified plan by executing it {Examiner correlates the test execution session not yet being completed based on attempts that the verifying the identified plan by executing it}).
It would have been obvious to a person of ordinary skill in the art, before the effective filing date of the invention, to modify Bestgen (teaches a computer-implemented method, comprising: detecting performance regression of executing a query using a current query plan; responsive to detecting the performance regression, automatically generating an alternative query plan as a candidate solution for resolving the performance regression; automatically starting in a designated execution thread of a query processing engine to execute the query using the alternative query plan; monitoring an elapsed duration after starting the test execution session in a timer thread of the query processing engine, wherein the timer thread is independent of the designated execution thread; and responsive to detecting that the elapsed duration exceeds a timeout value, wherein the timeout value is calculated based on a predetermined execution time for executing the query using the current query plan) with the teachings of Belknap (teaches a computer-implemented method for performing foreground testing for improved automatic performance regression management in database systems comprising a test execution session in a designated execution thread, and responsive to detecting that the test execution session has not been completed). One of ordinary skill in the art would have been motivated to make such a combination is modify the system of Bestgen’s detecting problem regression by generating a alternative plan to improve the perform to include Belknap’s test session execution method providing improvement to find a faster way to reduce the issue in the main system and utilizing a separate thread to verify to prevent any regression (See Belknap [0156]). In addition, the references (Bestgen and Belknap) teach features that are directed to analogous art and they are directed to the same field of endeavor as Bestgen and Belknap are directed to database system in which troubleshoot problems and provide a remedy accordingly.
Regarding claim 20, Bestgen teaches detecting performance regression of executing a query using a current query plan (Bestgen: [0020]; Some such methods also include setting a timer having a time relating to an expected execution time of a first query plan for executing the database query. The first query plan taking too long to complete can be determined at least in part by the timer timing out. [0071]; In step 414 a user job (500) begins to execute the DB query. The first time this user job attempts to execute a query, a queue (503) is created in step 416, which will receive runaway query messages, if any are generated. A timed message is created in step 418, and sent to a timer (508) in step 420. In the event there is a runaway query, indicated by the “N” branch from step 422, the timer message is not cancelled, indicated by arrival at step 426 {Examiner correlates detecting the performance regression based on the query plan taking too long based on determining that it performing worse than expected based on the timer});
responsive to detecting the performance regression, automatically generating an alternative query plan as a candidate solution for resolving the performance regression (Bestgen: [0019]; After detecting a problem query, the plan that is executing and resulting in the problem can have the risky construct identified and removed from future consideration to execute the current query. In response to a first selected plan taking too long to execute, the query can be re-costed, the currently running query cancelled, and a second plan selected and executed. [0082]; If there is a problem, the currently running plan can be re-costed or otherwise marked as risky or long running. The re-costing process in the query job can occur in a secondary thread so as not to interfere with the executing plan (to minimize disruption should the plan ultimately complete). During the re-costing process, potential plans that contain these constructs will either not be considered as part of the plan space or forced to be reconsidered, as applicable {Examiner correlates the automatically generating an alternative query plan based on the query being re-costed when there is problem with the current plan which is detecting a problem, thus, the second plan (candidate plan) is selected to utilized to resolve the issue});
automatically starting in a execution session in a designated execution thread of a query processing engine to execute the query using the alternative query plan (Bestgen: [0018]; This secondary thread may also be referred to as a guardian thread or a maintenance thread. In some embodiments, this secondary thread is created only in response to the occurrence of a problem query. In this way, the overhead of creating the secondary thread is incurred only when needed, not for every query regardless of the existence of a problem. [0021]; Some methods also include executing a thread to supervise stopping the first query plan execution and the initiating the second query plan execution, where the thread is created responsive to the first query plan taking too long to complete {Examiner correlates the guardian thread or maintenance thread as the designated thread to manage the alternative query plan in case there is problem with the current first query plan});
monitoring an elapsed duration after starting the test execution session in a timer thread of the query processing engine, wherein the timer thread is independent of the designated execution thread (Bestgen: [0071]; The first time this user job attempts to execute a query, a queue (503) is created in step 416, which will receive runaway query messages, if any are generated. A timed message is created in step 418, and sent to a timer (508) in step 420. [0078]; If the timer expires, timer 508 has the ID of the queue to send the timed message to. So, timer 508 can send timed message 514 to system queue 510. As system job 512 was waiting on a receive, system job 512 wakes up, logs the received message to a log file, and pushes the (doit) method within message (object) 514, as indicated at 513 {Examiner correlates the monitoring the elapsed duration after starting based on the user job executing the query and a timer is started based on the timed message created. The timer thread being independent from the designated execution thread is based on the user job executing the query. The timer 508 is a separate entity that waits upon the execution of the query of the user. Once the timer expires the timer acts a separate job of system job 512 to handle the results in a log}); and
responsive to detecting that the elapsed duration exceeds a timeout value and the execution session has not been completed (Bestgen: [0076]; The message can be an object which includes instructions as to what to do should the timer expire. [0079], “The initial uses of events can be: (1) Tell the user job to spawn a guardian thread and interrogate the maintenance queue for a specific action to perform; (2) Tell the user job to conditionally (only if the current plan has not reached the point of no return) cancel the current SQL plan and restart the query using a new plan found in plan cache 534. [0083]; this plan still has a significant amount of processing to reach completion, the database engine can be interrupted so as to replace the current plan executable with the re-optimized plan executable and re-start the execution {Examiner correlates the detecting of the elapse time based on the plan taking to long based on a point of no return in such that the database engine can be interrupted and replace the current plan and re-start the execution}),
automatically terminating the execution session in the designated execution thread and re-executing the query using the current query plan (Bestgen: [0018]; This secondary thread may also be referred to as a guardian thread or a maintenance thread. In some embodiments, this secondary thread is created only in response to the occurrence of a problem query. In this way, the overhead of creating the secondary thread is incurred only when needed, not for every query regardless of the existence of a problem. [0076]; The message can be an object which includes instructions as to what to do should the timer expire. [0079], “The initial uses of events can be: (1) Tell the user job to spawn a guardian thread and interrogate the maintenance queue for a specific action to perform; (2) Tell the user job to conditionally (only if the current plan has not reached the point of no return) cancel the current SQL plan and restart the query using a new plan found in plan cache 534. [0083]; this plan still has a significant amount of processing to reach completion, the database engine can be interrupted so as to replace the current plan executable with the re-optimized plan executable and re-start the execution) wherein
the timeout value is calculated based on a predetermined execution time for executing the query using the current query plan (Bestgen: [0076]; The time entered in the timer is related to the estimated completion time of the physical plan to be executed, in many embodiments. The timer may be the estimated completion time adjusted upward by a percentage and/or an absolute amount of time, depending on the embodiment. [0079]; The initial uses of events can be: (1) Tell the user job to spawn a guardian thread and interrogate the maintenance queue for a specific action to perform; (2) Tell the user job to conditionally (only if the current plan has not reached the point of no return) cancel the current SQL plan and restart the query using a new plan found in plan cache 534);
Although, Bestgen teaches a execution session in a designated execution thread (See Bestgen: [0018]; This secondary thread may also be referred to as a guardian thread or a maintenance thread. In some embodiments, this secondary thread is created only in response to the occurrence of a problem query. In this way, the overhead of creating the secondary thread is incurred only when needed, not for every query regardless of the existence of a problem). Bestgen does not explicitly teach one or more non-transitory computer-readable media having encoded thereon computer-executable instructions causing one or more processors to perform a method for performing foreground testing for improved automatic performance regression management in database systems, the method comprising: a test execution session in a designated execution thread, and responsive to detecting that the test execution session has not been completed; and rejecting the alternative query plan as the candidate solution.
However, Belknap teaches one or more non-transitory computer-readable media having encoded thereon computer-executable instructions causing one or more processors to perform a method for performing foreground testing for improved automatic performance regression management in database systems, the method comprising (Belknap: [0210]; The term “machine-readable medium” as used herein refers to any medium that participates in providing data that causes a machine to operation in a specific fashion. In an embodiment implemented using computer system 700, various machine-readable media are involved, for example, in providing instructions to processor 704 for execution. All such media must be tangible to enable the instructions carried by the media to be detected by a physical mechanism that reads the instructions into a machine. [0066]; the database server executes the first plan to determine performance statistics for the first plan. Based at least on the performance statistics, the database server determines to verify the first plan… The database server satisfies the second request by executing the database command according to the first plan, which is now verified. [0167]; query plan must be verified before it may be selected by the query optimizer. When a query optimizer predicts that a new plan will perform a database command better than any other plan, the query optimizer notes the new plan, but selects an older, verified plan for executing the database command. Subsequently, the query optimizer may verify the new plan by executing it, so as to determine whether or not the new plan performs as well as predicted (or, at least, better than other verified plan)):
a test execution session in a designated execution thread (Belknap: [0167]; Subsequently, the query optimizer may verify the new plan by executing it, so as to determine whether or not the new plan performs as well as predicted (or, at least, better than other verified plan). [0176]; In step 590, the database server attempts to verify the identified plan by executing it. [0181]-[0182]; The database server may automatically perform steps 590-596 for each query plan in each list of query plans that require verification as part of a periodically scheduled job. The database server may also perform steps 590-596 as a background process. According to an embodiment, verification may occur concurrently with the execution of a verified plan in response to the request for which a new plan was generated. The database server may run both of these plans concurrently {Examiner correlates the test execution session in the designated execution thread based on the plan being run on a separately based on the plans being run concurrently. One being the unverified plan being the test execution}) and responsive to detecting that the test execution session has not been completed (Belknap: [0066]-[0067]; The database server instead satisfies the first request by executing the database command according to a verified plan. Subsequent to satisfying the first request—for example as part of a periodically scheduled job—the database server executes the first plan to determine performance statistics for the first plan. Concurrently, the database server executes the database command according to a verified plan. If the first plan completes before the verified plan, the database server verifies the first plan. [0176]; In step 590, the database server attempts to verify the identified plan by executing it {Examiner correlates the test execution session not yet being completed based on attempts that the verifying the identified plan by executing it}); and
rejecting the alternative query plan as the candidate solution (Belknap: [0068]; Based at least on the performance statistics, the database server determines to store verification data for the first plan indicating that the first plan is unacceptable. Subsequently, the database server receives a second request to execute the database command. The database server determines a second plan for satisfying the second request to execute the database command, the second plan being equivalent to the first plan. The database server instead satisfies the second request by executing the database command according to a verified, acceptable plan. [0187]; Based on the collected statistics, and also possibly based on a comparison to statistics collected for other verified query plans, the server or administrator may decide to permanently verify the plan as either acceptable or unacceptable).
It would have been obvious to a person of ordinary skill in the art, before the effective filing date of the invention, to modify Bestgen (teaches a computer-implemented method, comprising: detecting performance regression of executing a query using a current query plan; responsive to detecting the performance regression, automatically generating an alternative query plan as a candidate solution for resolving the performance regression; automatically starting in a designated execution thread of a query processing engine to execute the query using the alternative query plan; monitoring an elapsed duration after starting the test execution session in a timer thread of the query processing engine, wherein the timer thread is independent of the designated execution thread; and responsive to detecting that the elapsed duration exceeds a timeout value, wherein the timeout value is calculated based on a predetermined execution time for executing the query using the current query plan) with the teachings of Belknap (teaches a computer-implemented method for performing foreground testing for improved automatic performance regression management in database systems comprising a test execution session in a designated execution thread, and responsive to detecting that the test execution session has not been completed). One of ordinary skill in the art would have been motivated to make such a combination is modify the system of Bestgen’s detecting problem regression by generating a alternative plan to improve the perform to include Belknap’s test session execution method providing improvement to find a faster way to reduce the issue in the main system and utilizing a separate thread to verify to prevent any regression (See Belknap [0156]). In addition, the references (Bestgen and Belknap) teach features that are directed to analogous art and they are directed to the same field of endeavor as Bestgen and Belknap are directed to database system in which troubleshoot problems and provide a remedy accordingly.
Claims 2-5, 7-8, and 12-17 are rejected under 35 U.S.C. 103 as being unpatentable over U.S Patent Application Publication 2009/0094192 issued to Bestgen et al. (hereinafter as "Bestgen") in view of U.S Patent Application Publication 2009/0106219 issued to Belknap et al. (hereinafter as “Belknap”)
in further view of U.S Patent Application Publication 2009/0327468 issued to Hirsch et al. (hereinafter as “Hirsch”).
Regarding claim 2, the modification of Bestgen and Belknap teaches claimed invention substantially as claimed, however, the modification of Bestgen and Belknap does not explicitly teach monitoring the elapsed duration comprises registering a timer object in the timer thread when starting the test execution session in the designated execution thread, wherein the timer object specifies the timeout value and a callback object, wherein registering the timer object starts a timer
Hirsch teaches monitoring the elapsed duration comprises registering a timer object in the timer thread when starting the test execution session in the designated execution thread, wherein the timer object specifies the timeout value and a callback object, wherein registering the timer object starts a timer (Hirsch: [0055]: A determination is then made by the command execution thread as to whether user input has been received from the client within a specified amount of time (step 522). This determination may be made using user input request timer 308 in FIG. 3. [0068]-[0069]; Command threads 704 are coordinated by a CommandThreadManager 703 that maintains a registry of conversation IDs and a list of command threads. When the command thread is started, a lastAccessTime attribute is initialized to allow tracking threads which may have been abandoned and their corresponding cleanup…the status of the command, getting the command status results, and terminating the command).
It would have been obvious to a person of ordinary skill in the art, before the effective filing date of the invention, to modify Bestgen (teaches a computer-implemented method, comprising: detecting performance regression of executing a query using a current query plan; responsive to detecting the performance regression, automatically generating an alternative query plan as a candidate solution for resolving the performance regression; automatically starting in a designated execution thread of a query processing engine to execute the query using the alternative query plan; monitoring an elapsed duration after starting the test execution session in a timer thread of the query processing engine, wherein the timer thread is independent of the designated execution thread; and responsive to detecting that the elapsed duration exceeds a timeout value, wherein the timeout value is calculated based on a predetermined execution time for executing the query using the current query plan) with the teachings of Belknap (teaches a computer-implemented method for performing foreground testing for improved automatic performance regression management in database systems comprising a test execution session in a designated execution thread, and responsive to detecting that the test execution session has not been completed) to further include the teachings of Hirsch (teaches monitoring the elapsed duration comprises registering a timer object in the timer thread when starting the test execution session in the designated execution thread, wherein the timer object specifies the timeout value and a callback object, wherein registering the timer object starts a timer). One of ordinary skill in the art would have been motivated to make such a combination is to include record in determining whether the operation is has been perform and perform associated operation to cleanup accordingly (See Hirsch: [0052]). In addition, the references (Bestgen, Belknap, and Hirsch) teach features that are directed to analogous art and they are directed to the same field of endeavor as Bestgen, Belknap, and Hirsch are directed to database system in which troubleshoot problems and provide a remedy accordingly.
Regarding claim 3, the modification of Bestgen, Belknap, and Hirsch teaches claimed invention substantially as claimed, and Hirsch further teaches
monitoring the elapsed duration further comprises activating the callback object upon the timer reaches the timeout value, wherein activation of the callback object sends a cancellation request to a session manager of the query processing engine (Hirsch: [0044]; Web server 304 also starts user input request timer 308, so that if a response from web client 302 is not received within an acceptable amount of time, command execution is terminated so as not to tie up server resources for too long. [0074]-[0075]; The request command status timer is used to periodically fire an ‘on request command status’ event that signals to the dialog that a new command status should be requested by the client. A determination is then made by the client as to whether the user has indicated a desire to terminate execution of the command, such as by selecting Cancel button 402 in dialog 400 in FIG. 4 (step 811). The user may at any time indicate that termination of the command is desired), wherein
the session manager is configured to manage multiple execution sessions in multiple execution threads of the query processing engine, wherein the cancellation request uniquely identifies the test execution session (Hirsch:[0068]-[0069]; Command threads 704 are coordinated by a CommandThreadManager 703 that maintains a registry of conversation IDs and a list of command threads. When the command thread is started, a lastAccessTime attribute is initialized to allow tracking threads which may have been abandoned and their corresponding cleanup…checking on the status of the command, getting the command status results, and terminating the command).
Regarding claim 4, the modification of Bestgen, Belknap, and Hirsch teaches claimed invention substantially as claimed, and Hirsch further teaches
terminating the test execution session comprises setting, by the session manager, a cancellation flag associated the designated execution thread in a thread context object (Hirsch: [0066]; The command thread provides an interface for accessing its commands and also for controlling its execution, such as a terminate( ) method, that sets a flag in the command, allowing the command to terminate. The command thread is identified by a Conversation object 715, which contains a unique conversation ID. [0068]-[0069]; Command threads 704 are coordinated by a CommandThreadManager 703 that maintains a registry of conversation IDs and a list of command threads. When the command thread is started, a lastAccessTime attribute is initialized to allow tracking threads which may have been abandoned and their corresponding cleanup…checking on the status of the command, getting the command status results, and terminating the command), wherein
the thread context object is configured to record operational data of the multiple execution sessions managed by the session manager (Hirsch: [0066]; The command thread provides an interface for accessing its commands and also for controlling its execution, such as a terminate( ) method, that sets a flag in the command, allowing the command to terminate. The command thread is identified by a Conversation object 715, which contains a unique conversation ID. [0068]-[0069]; Command threads 704 are coordinated by a CommandThreadManager 703 that maintains a registry of conversation IDs and a list of command threads. When the command thread is started, a lastAccessTime attribute is initialized to allow tracking threads which may have been abandoned and their corresponding cleanup…checking on the status of the command, getting the command status results, and terminating the command).
Regarding claim 5, the modification of Bestgen, Belknap, and Hirsch teaches claimed invention substantially as claimed, and Hirsch further teaches
terminating the test execution session further comprises: transmitting a service request from the test execution session to a service operator of the query processing engine (Hirsch: [0044]-[0045]; The requested command status response may optionally comprise information (user input request) that signals to web client 302 that a certain user input is required to continue command execution. When web client 302 receives the user input request from web server 304, web client 302 prompts the user to provide input via user input dialog 310. Web client 302 gathers information from the user through user input dialog 310 and then returns the gathered input information via a user input response to web server 304); and
responsive to receiving the service request and detecting the cancellation flag is set for the test execution session, throwing an exception by the service operator (Hirsch: [0063]; Responsive to the server setting the termination flag in step 610, the command thread detects the termination flag (step 603). When the command thread detects the termination flag, the command thread throws an exception and rolls back the transaction (step 604)).
Regarding claim 7, the modification of Bestgen, Belknap, and Hirsch teaches claimed invention substantially as claimed, and Hirsch further teaches
terminating the test execution session further comprises catching the exception by the test execution session (Hirsch: [0039]; When a user wants to terminate a running command, the web client sends a termination command to the web server with the conversation ID of the running command as received by the web server when the running command was started. The termination command sets a flag in the running command thread. When the running command thread detects the termination flag, the running command thread throws an exception and rolls back the transaction).
Regarding claim 8, the modification of Bestgen, Belknap, and Hirsch teaches claimed invention substantially as claimed, and Hirsch further teaches
clearing the cancellation flag associated the designated execution thread after terminating the test execution session (Hirsch: [0068]-[0069]; Command threads 704 are coordinated by a CommandThreadManager 703 that maintains a registry of conversation IDs and a list of command threads. When the command thread is started, a lastAccessTime attribute is initialized to allow tracking threads which may have been abandoned and their corresponding cleanup. AsyncCommandServiceImpl class 705 provides implementations of the methods for starting a command, checking on the status of the command, getting the command status results, and terminating the command).
Regarding claim 12, the modification of Bestgen and Belknap teaches claimed invention substantially as claimed, however, the modification of Bestgen and Belknap does not explicitly teach monitoring the elapsed duration comprises registering a timer object in the timer thread when starting the test execution session in the designated execution thread, wherein the timer object specifies the timeout value and a callback object, wherein registering the timer object starts a timer.
Hirsch teaches monitoring the elapsed duration comprises registering a timer object in the timer thread when starting the test execution session in the designated execution thread, wherein the timer object specifies the timeout value and a callback object, wherein registering the timer object starts a timer (Hirsch: [0055]: A determination is then made by the command execution thread as to whether user input has been received from the client within a specified amount of time (step 522). This determination may be made using user input request timer 308 in FIG. 3. [0068]-[0069]; Command threads 704 are coordinated by a CommandThreadManager 703 that maintains a registry of conversation IDs and a list of command threads. When the command thread is started, a lastAccessTime attribute is initialized to allow tracking threads which may have been abandoned and their corresponding cleanup…the status of the command, getting the command status results, and terminating the command).
It would have been obvious to a person of ordinary skill in the art, before the effective filing date of the invention, to modify Bestgen (teaches a computer-implemented method, comprising: detecting performance regression of executing a query using a current query plan; responsive to detecting the performance regression, automatically generating an alternative query plan as a candidate solution for resolving the performance regression; automatically starting in a designated execution thread of a query processing engine to execute the query using the alternative query plan; monitoring an elapsed duration after starting the test execution session in a timer thread of the query processing engine, wherein the timer thread is independent of the designated execution thread; and responsive to detecting that the elapsed duration exceeds a timeout value, wherein the timeout value is calculated based on a predetermined execution time for executing the query using the current query plan) with the teachings of Belknap (teaches a computer-implemented method for performing foreground testing for improved automatic performance regression management in database systems comprising a test execution session in a designated execution thread, and responsive to detecting that the test execution session has not been completed) to further include the teachings of Hirsch (teaches monitoring the elapsed duration comprises registering a timer object in the timer thread when starting the test execution session in the designated execution thread, wherein the timer object specifies the timeout value and a callback object, wherein registering the timer object starts a timer). One of ordinary skill in the art would have been motivated to make such a combination is to include record in determining whether the operation is has been perform and perform associated operation to cleanup accordingly (See Hirsch: [0052]). In addition, the references (Bestgen, Belknap, and Hirsch) teach features that are directed to analogous art and they are directed to the same field of endeavor as Bestgen, Belknap, and Hirsch are directed to database system in which troubleshoot problems and provide a remedy accordingly.
Regarding claim 13, the modification of Bestgen, Belknap, and Hirsch teaches claimed invention substantially as claimed, and Hirsch further teaches
monitoring the elapsed duration further comprises activating the callback object upon the timer reaches the timeout value, wherein activation of the callback object sends a cancellation request to a session manager of the query processing engine (Hirsch: [0044]; Web server 304 also starts user input request timer 308, so that if a response from web client 302 is not received within an acceptable amount of time, command execution is terminated so as not to tie up server resources for too long. [0074]-[0075]; The request command status timer is used to periodically fire an ‘on request command status’ event that signals to the dialog that a new command status should be requested by the client. A determination is then made by the client as to whether the user has indicated a desire to terminate execution of the command, such as by selecting Cancel button 402 in dialog 400 in FIG. 4 (step 811). The user may at any time indicate that termination of the command is desired), wherein
the session manager is configured to manage multiple execution sessions in multiple execution threads of the query processing engine, wherein the cancellation request uniquely identifies the test execution session (Hirsch:[0068]-[0069]; Command threads 704 are coordinated by a CommandThreadManager 703 that maintains a registry of conversation IDs and a list of command threads. When the command thread is started, a lastAccessTime attribute is initialized to allow tracking threads which may have been abandoned and their corresponding cleanup…checking on the status of the command, getting the command status results, and terminating the command).
Regarding claim 14, the modification of Bestgen, Belknap, and Hirsch teaches claimed invention substantially as claimed, and Hirsch further teaches
terminating the test execution session comprises setting, by the session manager, a cancellation flag associated the designated execution thread in a thread context object ((Hirsch: [0066]; The command thread provides an interface for accessing its commands and also for controlling its execution, such as a terminate( ) method, that sets a flag in the command, allowing the command to terminate. The command thread is identified by a Conversation object 715, which contains a unique conversation ID. [0068]-[0069]; Command threads 704 are coordinated by a CommandThreadManager 703 that maintains a registry of conversation IDs and a list of command threads. When the command thread is started, a lastAccessTime attribute is initialized to allow tracking threads which may have been abandoned and their corresponding cleanup…checking on the status of the command, getting the command status results, and terminating the command), wherein
the thread context object is configured to record operational data of the multiple execution sessions managed by the session manager (Hirsch: [0066]; The command thread provides an interface for accessing its commands and also for controlling its execution, such as a terminate( ) method, that sets a flag in the command, allowing the command to terminate. The command thread is identified by a Conversation object 715, which contains a unique conversation ID. [0068]-[0069]; Command threads 704 are coordinated by a CommandThreadManager 703 that maintains a registry of conversation IDs and a list of command threads. When the command thread is started, a lastAccessTime attribute is initialized to allow tracking threads which may have been abandoned and their corresponding cleanup…checking on the status of the command, getting the command status results, and terminating the command).
Regarding claim 15, the modification of Bestgen, Belknap, and Hirsch teaches claimed invention substantially as claimed, and Hirsch further teaches
terminating the test execution session further comprise: transmitting a memory request from the test execution session to a memory allocator of the query processing engine (Hirsch: [0044]-[0045]; The requested command status response may optionally comprise information (user input request) that signals to web client 302 that a certain user input is required to continue command execution. When web client 302 receives the user input request from web server 304, web client 302 prompts the user to provide input via user input dialog 310. Web client 302 gathers information from the user through user input dialog 310 and then returns the gathered input information via a user input response to web server 304); and
responsive to receiving the memory request and detecting the cancelling flag is set for the test execution session, throwing an out-of-memory exception by the memory allocator (Hirsch: [0063]; Responsive to the server setting the termination flag in step 610, the command thread detects the termination flag (step 603). When the command thread detects the termination flag, the command thread throws an exception and rolls back the transaction (step 604)).
Regarding claim 16, the modification of Bestgen, Belknap, and Hirsch teaches claimed invention substantially as claimed, and Hirsch further teaches
terminating the test execution session further comprises catching the exception by the test execution session (Hirsch: [0039]; When a user wants to terminate a running command, the web client sends a termination command to the web server with the conversation ID of the running command as received by the web server when the running command was started. The termination command sets a flag in the running command thread. When the running command thread detects the termination flag, the running command thread throws an exception and rolls back the transaction).
Regarding claim 17, the modification of Bestgen, Belknap, and Hirsch teaches claimed invention substantially as claimed, and Hirsch further teaches
the operations further comprise clearing the cancellation flag associated the designated execution thread after terminating the test execution session(Hirsch: [0068]-[0069]; Command threads 704 are coordinated by a CommandThreadManager 703 that maintains a registry of conversation IDs and a list of command threads. When the command thread is started, a lastAccessTime attribute is initialized to allow tracking threads which may have been abandoned and their corresponding cleanup. AsyncCommandServiceImpl class 705 provides implementations of the methods for starting a command, checking on the status of the command, getting the command status results, and terminating the command).
Claim 6 is rejected under 35 U.S.C. 103 as being unpatentable over U.S Patent Application Publication 2009/0094192 issued to Bestgen et al. (hereinafter as "Bestgen") in view of U.S Patent Application Publication 2009/0106219 issued to Belknap et al. (hereinafter as “Belknap”) in view of U.S Patent Application Publication 2009/0327468 issued to Hirsch et al. (hereinafter as “Hirsch”) in further view of U.S Patent Application Publication 2016/0321046 issued to Pizlo et al. (hereinafter as “Pizlo”).
Regarding claim 6, the modification of Bestgen, Belknap, and Hirsch teaches claimed invention substantially as claimed, however, the modification of Bestgen, Belknap, and Hirsch does not explicitly teach the service operator is configured to manage a heap memory of the query processing engine, wherein
the service request requests allocating at least a portion of the heap memory for the test execution session, wherein the exception indicates a failure of allocating the heap memory.
Pizlo teaches the service operator is configured to manage a heap memory of the query processing engine (Pizlo: [0090]-[0091]; The processing logic of process 600 can monitor a runtime status for rounds of execution of a continuously compiled code. The runtime status can indicate a progress of each round of execution. In one embodiment, a runtime status can include a counter counting how many times a data processing task (e.g. a function call) has been invoked, a measure of memory usage indicating amount of memory used (e.g. out of a heap memory allocated for executing a code), or other applicable indicators for a progress of each round of execution (or execution iteration) of a continuous compiled code), wherein
the service request requests allocating at least a portion of the heap memory for the test execution session, wherein the exception indicates a failure of allocating the heap memory (Pizlo: [0131]; Garbage collection operations may be invoked when attempts to allocate memory (e.g. in response to allocation requests from code execution) fail. [0133]; Garbage collection operations may be invoked if the amount of memory used exceeds the target usage budget. The target usage budget may be dynamically configured to, for example, a double of the size of total live objects, to control memory allocation performance).
It would have been obvious to a person of ordinary skill in the art, before the effective filing date of the invention, to modify Bestgen (teaches a computer-implemented method, comprising: detecting performance regression of executing a query using a current query plan; responsive to detecting the performance regression, automatically generating an alternative query plan as a candidate solution for resolving the performance regression; automatically starting in a designated execution thread of a query processing engine to execute the query using the alternative query plan; monitoring an elapsed duration after starting the test execution session in a timer thread of the query processing engine, wherein the timer thread is independent of the designated execution thread; and responsive to detecting that the elapsed duration exceeds a timeout value, wherein the timeout value is calculated based on a predetermined execution time for executing the query using the current query plan) with the teachings of Belknap (teaches a computer-implemented method for performing foreground testing for improved automatic performance regression management in database systems comprising a test execution session in a designated execution thread, and responsive to detecting that the test execution session has not been completed) to include the teachings of Hirsch (teaches monitoring the elapsed duration comprises registering a timer object in the timer thread when starting the test execution session in the designated execution thread, wherein the timer object specifies the timeout value and a callback object, wherein registering the timer object starts a timer) to further include the teachings of Pizlo (teaches the service operator is configured to manage a heap memory of the query processing engine, wherein the service request requests allocating at least a portion of the heap memory for the test execution session, wherein the exception indicates a failure of allocating the heap memory). One of ordinary skill in the art would have been motivated to make such a combination is to include providing failure when allocating data to provide applicable estimations or measures on whether current execution performance can be improved based on runtime data (See Pizlo: [0074]). In addition, the references (Bestgen, Belknap, Hirsch, and Pizlo) teach features that are directed to analogous art and they are directed to the same field of endeavor as Bestgen, Belknap, Hirsch, and Pizlo are directed to database system in which troubleshoot problems and provide a remedy accordingly.
Claims 9 and 18 are rejected under 35 U.S.C. 103 as being unpatentable over U.S Patent Application Publication 2009/0094192 issued to Bestgen et al. (hereinafter as "Bestgen") in view of U.S Patent Application Publication 2009/0106219 issued to Belknap et al. (hereinafter as “Belknap”) in view of U.S Patent Application Publication 2009/0327468 issued to Hirsch et al. (hereinafter as “Hirsch”) in further view of U.S Patent Application Publication 2005/0108188 issued to Santosuosso et al. (hereinafter as “Santosuosso”).
Regarding claim 9, the modification of Bestgen, Belknap, and Hirsch teaches claimed invention substantially as claimed, however, the modification of Bestgen, Belknap, and Hirsch does not explicitly teach responsive to detecting that the elapsed duration has not reached the timeout value and the test execution session has been completed, unregistering the timer object from the timer thread, wherein unregistering the timer object deletes the timer.
Santosuosso teaches responsive to detecting that the elapsed duration has not reached the timeout value and the test execution session has been completed, unregistering the timer object from the timer thread, wherein unregistering the timer object deletes the timer (Santosuosso: [0023]; determined that the query can finish within the timeout values, then the execution time is reset for each timeout as indicated in a block 306 and monitors are set as indicated in a block 308. A monitor in this case is one that will track processing time of a user defined function (UDF) and/or a trigger. The monitor or monitors track the timeout values previously set).
It would have been obvious to a person of ordinary skill in the art, before the effective filing date of the invention, to modify Bestgen (teaches a computer-implemented method, comprising: detecting performance regression of executing a query using a current query plan; responsive to detecting the performance regression, automatically generating an alternative query plan as a candidate solution for resolving the performance regression; automatically starting in a designated execution thread of a query processing engine to execute the query using the alternative query plan; monitoring an elapsed duration after starting the test execution session in a timer thread of the query processing engine, wherein the timer thread is independent of the designated execution thread; and responsive to detecting that the elapsed duration exceeds a timeout value, wherein the timeout value is calculated based on a predetermined execution time for executing the query using the current query plan) with the teachings of Belknap (teaches a computer-implemented method for performing foreground testing for improved automatic performance regression management in database systems comprising a test execution session in a designated execution thread, and responsive to detecting that the test execution session has not been completed) to include the teachings of Hirsch (teaches monitoring the elapsed duration comprises registering a timer object in the timer thread when starting the test execution session in the designated execution thread, wherein the timer object specifies the timeout value and a callback object, wherein registering the timer object starts a timer) to further include the teachings of Santosuosso (teaches detecting that the elapsed duration has not reached the timeout value and the test execution session has been completed, unregistering the timer object from the timer thread, wherein unregistering the timer object deletes the timer). One of ordinary skill in the art would have been motivated to make such a combination is to include monitor and track the processing time and make a determination to clear the record accordingly to determining the query has been completed in making the system more efficiently (See Santosuosso: [0023]). In addition, the references (Bestgen, Belknap, Hirsch, and Santosuosso) teach features that are directed to analogous art and they are directed to the same field of endeavor as Bestgen, Belknap, Hirsch, and Santosuosso are directed to database system in which troubleshoot problems and provide a remedy accordingly.
Regarding claim 18, the modification of Bestgen, Belknap, and Hirsch teaches claimed invention substantially as claimed, however, the modification of Bestgen, Belknap, and Hirsch does not explicitly teach the operations further comprise: responsive to detecting that the elapsed duration has not reached the timeout value and the test execution session has been completed, unregistering the timer object from the timer thread, wherein unregistering the timer object deletes the timer.
Santosuosso teaches the operations further comprise: responsive to detecting that the elapsed duration has not reached the timeout value and the test execution session has been completed, unregistering the timer object from the timer thread, wherein unregistering the timer object deletes the timer (Santosuosso: [0023]; determined that the query can finish within the timeout values, then the execution time is reset for each timeout as indicated in a block 306 and monitors are set as indicated in a block 308. A monitor in this case is one that will track processing time of a user defined function (UDF) and/or a trigger. The monitor or monitors track the timeout values previously set).
It would have been obvious to a person of ordinary skill in the art, before the effective filing date of the invention, to modify Bestgen (teaches a computer-implemented method, comprising: detecting performance regression of executing a query using a current query plan; responsive to detecting the performance regression, automatically generating an alternative query plan as a candidate solution for resolving the performance regression; automatically starting in a designated execution thread of a query processing engine to execute the query using the alternative query plan; monitoring an elapsed duration after starting the test execution session in a timer thread of the query processing engine, wherein the timer thread is independent of the designated execution thread; and responsive to detecting that the elapsed duration exceeds a timeout value, wherein the timeout value is calculated based on a predetermined execution time for executing the query using the current query plan) with the teachings of Belknap (teaches a computer-implemented method for performing foreground testing for improved automatic performance regression management in database systems comprising a test execution session in a designated execution thread, and responsive to detecting that the test execution session has not been completed) to include the teachings of Hirsch (teaches monitoring the elapsed duration comprises registering a timer object in the timer thread when starting the test execution session in the designated execution thread, wherein the timer object specifies the timeout value and a callback object, wherein registering the timer object starts a timer) to further include the teachings of Santosuosso (teaches detecting that the elapsed duration has not reached the timeout value and the test execution session has been completed, unregistering the timer object from the timer thread, wherein unregistering the timer object deletes the timer). One of ordinary skill in the art would have been motivated to make such a combination is to include monitor and track the processing time and make a determination to clear the record accordingly to determining the query has been completed in making the system more efficiently (See Santosuosso: [0023]). In addition, the references (Bestgen, Belknap, Hirsch, and Santosuosso) teach features that are directed to analogous art and they are directed to the same field of endeavor as Bestgen, Belknap, Hirsch, and Santosuosso are directed to database system in which troubleshoot problems and provide a remedy accordingly.
Claims 10 and 19 are rejected under 35 U.S.C. 103 as being unpatentable over U.S Patent Application Publication 2009/0094192 issued to Bestgen et al. (hereinafter as "Bestgen") in view of U.S Patent Application Publication 2009/0106219 issued to Belknap et al. (hereinafter as “Belknap”) in further view of U.S Patent Application Publication 2009/0125889 issued to IMAEDA et al. (hereinafter as “IMAEDA”).
Regarding claim 10, the modification of Bestgen and Belknap teaches claimed invention substantially as claimed, however, the modification of Bestgen and Belknap does not explicitly teach the timeout value equals the previously determined execution time for executing the query using the current query plan.
IMAEDA teaches the timeout value equals the previously determined execution time for executing the query using the current query plan (IMAEDA: [0216]; Otherwise, upon determining that the elapsed time since activation of the timer 21 is equal to or greater than the preset timeout period (YES in step S810), the CPU 11A deactivates the timer 21 in step S820, and sets the flag FA to OFF in step S830).
It would have been obvious to a person of ordinary skill in the art, before the effective filing date of the invention, to modify Bestgen (teaches a computer-implemented method, comprising: detecting performance regression of executing a query using a current query plan; responsive to detecting the performance regression, automatically generating an alternative query plan as a candidate solution for resolving the performance regression; automatically starting in a designated execution thread of a query processing engine to execute the query using the alternative query plan; monitoring an elapsed duration after starting the test execution session in a timer thread of the query processing engine, wherein the timer thread is independent of the designated execution thread; and responsive to detecting that the elapsed duration exceeds a timeout value, wherein the timeout value is calculated based on a predetermined execution time for executing the query using the current query plan) with the teachings of Belknap (teaches a computer-implemented method for performing foreground testing for improved automatic performance regression management in database systems comprising a test execution session in a designated execution thread, and responsive to detecting that the test execution session has not been completed) to further include the teachings of IMAEDA (teaches the timeout value equals a previously determined execution time for executing the query using the current query plan). One of ordinary skill in the art would have been motivated to make such a combination is to include monitor and track the processing time and make a determination that the timeout value equals a previously determined execution time for the current execution plan and making plans accordingly to make the system more efficiently (See IMAEDA: [0028]). In addition, the references (Bestgen, Belknap, and IMAEDA) teach features that are directed to analogous art and they are directed to the same field of endeavor as Bestgen, Belknap, and IMAEDA are directed to database system in which troubleshoot problems and provide a remedy accordingly.
Regarding claim 19, the modification of Bestgen and Belknap teaches claimed invention substantially as claimed, however, the modification of Bestgen and Belknap does not explicitly teach the timeout value equals the previously determined execution time for executing the query using the current query plan.
IMAEDA teaches the timeout value equals the previously determined execution time for executing the query using the current query plan (IMAEDA: [0216]; Otherwise, upon determining that the elapsed time since activation of the timer 21 is equal to or greater than the preset timeout period (YES in step S810), the CPU 11A deactivates the timer 21 in step S820, and sets the flag FA to OFF in step S830).
It would have been obvious to a person of ordinary skill in the art, before the effective filing date of the invention, to modify Bestgen (teaches a computer-implemented method, comprising: detecting performance regression of executing a query using a current query plan; responsive to detecting the performance regression, automatically generating an alternative query plan as a candidate solution for resolving the performance regression; automatically starting in a designated execution thread of a query processing engine to execute the query using the alternative query plan; monitoring an elapsed duration after starting the test execution session in a timer thread of the query processing engine, wherein the timer thread is independent of the designated execution thread; and responsive to detecting that the elapsed duration exceeds a timeout value, wherein the timeout value is calculated based on a predetermined execution time for executing the query using the current query plan) with the teachings of Belknap (teaches a computer-implemented method for performing foreground testing for improved automatic performance regression management in database systems comprising a test execution session in a designated execution thread, and responsive to detecting that the test execution session has not been completed) to further include the teachings of IMAEDA (teaches the timeout value equals a previously determined execution time for executing the query using the current query plan). One of ordinary skill in the art would have been motivated to make such a combination is to include monitor and track the processing time and make a determination that the timeout value equals a previously determined execution time for the current execution plan and making plans accordingly to make the system more efficiently (See IMAEDA: [0028]). In addition, the references (Bestgen, Belknap, and IMAEDA) teach features that are directed to analogous art and they are directed to the same field of endeavor as Bestgen, Belknap, and IMAEDA are directed to database system in which troubleshoot problems and provide a remedy accordingly.
Conclusion
The prior art made of record and not relied upon is considered pertinent to applicant's disclosure.
U.S Patent 8,478,743 issued to Chandramouli et al. (hereinafter as “Chandramouli”) teaches migrating state information of operators in a first continuous query plan to a second continuous query plan in a asynchronous manner.
U.S Patent Application Publication 2021/0081409 issued to Rath et al. (hereinafter as “Rath”) teaches operation to halt runaway queries in response to determining that a performance metric of a query exceed a performance threshold.
U.S Patent Application Publication 2023/0153303 issued to Doshi et al. (hereinafter as “Doshi”) teaches receiving a database query requesting a database to conditionally return one or more data blocks based on the query plan.
U.S Patent Application Publication 2023/01777053 issued to INTERLANDI et al. (hereinafter as “INTERLANDI et al. (hereinafter as “INTERLANDI”) teaches a query optimizer advisor to steer an efficient plan choice by providing more hints.
Applicant's amendment necessitated the new ground(s) of rejection presented in this Office action. Accordingly, THIS ACTION IS MADE FINAL. See MPEP § 706.07(a). Applicant is reminded of the extension of time policy as set forth in 37 CFR 1.136(a).
A shortened statutory period for reply to this final action is set to expire THREE MONTHS from the mailing date of this action. In the event a first reply is filed within TWO MONTHS of the mailing date of this final action and the advisory action is not mailed until after the end of the THREE-MONTH shortened statutory period, then the shortened statutory period will expire on the date the advisory action is mailed, and any nonprovisional extension fee (37 CFR 1.17(a)) pursuant to 37 CFR 1.136(a) will be calculated from the mailing date of the advisory action. In no event, however, will the statutory period for reply expire later than SIX MONTHS from the mailing date of this final action.
Contact Information
Any inquiry concerning this communication or earlier communications from the examiner should be directed to ANDREW N HO whose telephone number is (571)270-0590. The examiner can normally be reached Tuesday and Thursday 10:00-6:00.
Examiner interviews are available via telephone, in-person, and video conferencing using a USPTO supplied web-based collaboration tool. To schedule an interview, applicant is encouraged to use the USPTO Automated Interview Request (AIR) at http://www.uspto.gov/interviewpractice.
If attempts to reach the examiner by telephone are unsuccessful, the examiner’s supervisor, Sherief Badawi can be reached at (571) 272-9782. The fax phone number for the organization where this application or proceeding is assigned is 571-273-8300.
Information regarding the status of published or unpublished applications may be obtained from Patent Center. Unpublished application information in Patent Center is available to registered users. To file and manage patent submissions in Patent Center, visit: https://patentcenter.uspto.gov. Visit https://www.uspto.gov/patents/apply/patent-center for more information about Patent Center and https://www.uspto.gov/patents/docx for information about filing in DOCX format. For additional questions, contact the Electronic Business Center (EBC) at 866-217-9197 (toll-free). If you would like assistance from a USPTO Customer Service Representative, call 800-786-9199 (IN USA OR CANADA) or 571-272-1000.
5/4/2026
/ANDREW N HO/Examiner
Art Unit 2169
/SHERIEF BADAWI/Supervisory Patent Examiner, Art Unit 2169