Feature helps performance call (COLLECTION ITERATOR PICKLER FETCH)

11.2.0.3

Solaris 10

I need assistance with our implementation of the policy of restricting access. From our plans of execution and trace files, we see our political function run when querying tables restricted. This, of course, is planned and is done in a hash against the returned results join by the query . The function fills a set IDs based on the roles that the user has and pushes those predicates against object_1.

-------------------------------------------------------------------------------------------------------

| ID | Operation | Name | Lines | Bytes | Cost (% CPU). Time |

-------------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT |                  |  5331 |   786K |  1358 (21) | 00:00:03:

|*  1 |  HASH JOIN RIGHT SEMI |                  |  5331 |   786K |  1358 (21) | 00:00:03:

|   2.   COLLECTION ITERATOR PICKLER FETCH | GET_PERMISSIONS | 16360. 32720 |    20 (10) | 01:00:00 |

|   3.   TABLE ACCESS FULL | OBJECT_1 |   634K |    90 M |  1302 (19) | 00:00:03:

-------------------------------------------------------------------------------------------------------

The problem we have is with reports where the optimizer find it more effective to make an IMBRIQUEE LOOP between an object and the object of access restricted. The function is then called as as many times as the operation of nested loop runs. When a report may take a few seconds, it will be take minutes to complete because the function is called thousands of times. These reports are very long and complex but below is an example where I forced the nested loop (query takes too long without additional predicate).

SELECT / * + USE_NL (obj1, obj2) * /.

Ob1.ID

Of ob1, ob2 object_2 object_1

WHERE ob1.obj2_id = ob2.id (+) AND obj1.obj_name IN ('SOME_VALUE');

---------------------------------------------------------------------------------------------------------

| ID | Operation | Name | Lines | Bytes | Cost (% CPU). Time     |

---------------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT |                  |  3620 |   190K |   137 (2) | 01:00:00 |

|   1.  NESTED EXTERNAL LOOPS |                  |  3620 |   190K |   137 (2) | 01:00:00 |

|   2.   TABLE ACCESS BY INDEX ROWID | OBJECT_1 |  3620 |   123K |   135 (1) | 00:00:01 |

|*  3 |    INDEX SKIP SCAN | OBJECT1_FK_I |  3620 |       |    22 (0) | 01:00:00 |

|   4.   SEE PUSHED PREDICATE. OBJECT_2 |     1.    19.     1 (0) | 01:00:00 |

|   5.    SEMI NESTED LOOPS.                  |     1.    19.    21 (10) | 01:00:00 |

|   6.     TABLE ACCESS BY INDEX ROWID | OBJECT_2 |     1.    17.     1 (0) | 01:00:00 |

|*  7 |      INDEX UNIQUE SCAN | OBJECT_2_PK |     1.       |     1 (0) | 01:00:00 |

|*  8 |     COLLECTION ITERATOR PICKLER FETCH | GET_PERMISSIONS |   137.   274.    20 (10) | 01:00:00 |

---------------------------------------------------------------------------------------------------------

We have reports where the function is called more than 100 000 times and can take 12 minutes additional to complete. I'm not the developer of these reports or our policies, but I do my best to help in tune. I can force it to use hash joins, where possible, and the time of the request is excellent. There is, Unfortunately, thousands of these reports with different degrees of performance degradation because this function so that the developers are wondering if there are other alternatives. Is there a way to tell the optimizer to use of hash joins when dealing with this function? I looked at using different policy types (currently "SHARED_CONTEXT_SENSITIVE"), but neither contributed to improve performance. I've been all over the internet and have not been able to find a similar situation. I tried to be comprehensive, but I do not know I missed some vital information, then please let me know if I can explain it. Thoughts appreciated.

Thank you.

CREATE OR REPLACE FORCE VIEW SOME_SCHEMA. SECURITY_ID_TEMP

(

ID,

CONT_CN

)

AS

SELECT id, cont_cn

TABLE (CAST (some_pkg.get_ids AS rls_array)) t;

And this latter view is probably what is causing the problem. That's what I said in my answer:

A possible explanation is that your political function is a predicate that uses a collection.
. . .
Probably the political predicate sometimes involves a small number of elements and many other times.

And it is the predicate that you just posted:

IF ii_user_is_exempt (some_user)

THEN

predicate: = NULL;

ON THE OTHER

predicate: = 'security_id in (select id from security_id_v);

END IF;

RETURN of predicate;

The policy predicate is querying a view based on a collection. How the optimizer supposed to know how "rows" are in this collection 'rls_array' which is used as if it were a table?

As you return a NULL predicate in some cases. I've never tested it, but I would warn against it. See the doc of security

http://docs.Oracle.com/CD/E25054_01/network.1111/e16543/VPD.htm#CIHBEIFC

Creating a function to generate the dynamic WHERE Clause

To generate the dynamics WHERE clause (predicate), you must create a function (not a procedure) which defines the restrictions you want to apply. In general, the security administrator creates this function in its own schema. For a more complex behavior, such as including other functions or adding controls to track logon attempts, create these features within a package.

The function should have the following behavior:

  • It takes as arguments a scheme name and a name of object (table, view, or synonym) as inputs. Set the input parameters to contain this information, but do not specify the schema name and object themselves within the service. The strategy that you create with the DBMS_RLS (described in "creating a policy to attach the function to the objects you want to protect") provides the namespace of the schema and object to which the policy applies. You must create the parameter for the schema first, the setting for the object.
  • It must provide a return value for the predicate in the WHERE clause that will be generated. The return value for the WHERE article is always a VARCHAR2 data type.
  • It must generate a valid WHERE clause. This code can be as simple as the example in "tutorial: creating a Simple Oracle virtual private Database Policy ', in that its WHERE clause is the same for all users who log on.

I wonder the use of this collection as part of your policy mechanism.

TABLE (CAST (some_pkg.get_ids AS rls_array)) t;

First - each user has its own State of package. This means that each user has its own collection; This isn't a master collection (ID game) that is shared by all users. A real table, is where the data will be shared by all users should exist.

Second - this function 'get_ids' (I guess this is a feature rather than a grouping variable?) may actually be to interview one or more tables every time it is called. This means that EACH query that performs a user must first call that 'get_ids' that works while it asks a few real tables to obtain information and make a collection.

Even if a required collection to be used it must be created ONCE and then come back as needed.

This security architecture raises some red flags for me. It's the first thing that I looked at.

Yes, I know, any changes that might involve serious implications and require a substantial analysis, testing and implementation. But my suspicion is that where the root of the problem.

My assumption is at this time that your collection of 'rls_array', used as a table, is the cause of the problem. Oracle does not have statistics on the result set of this "table", and of one query to another, has no way to know if the number of 'lines' changes significantly.

Oracle could use some dynamic sampling to try to estimate things and inspiring that sampling is changing the execution plan. You could try to find a query which causes problems and to see how the number of items in collection compares the number of a normal query.

Short of this thorough/fix analysis which I think is necessary, your best bet may be to investigate pinning on an implementation plan; forcing the use of a basic plan for this query little matter that runs it.

If you want to study Sql Plan Management and this way opens up a new thread for this issue/question and provide a link to the current thread.

Here is an article from Oracle to become familiar with SPM

http://www.Oracle.com/technetwork/issue-archive/2009/09-Mar/o29spm-092092.html

And here is sample thread "How to force Oracle to use an implementation Plan" to give you an idea of the use of the mechanism.

https://community.Oracle.com/thread/991149?TSTART=0

See Jonathan Lewis's response in this thread.

There are many other threads and documentation, SPM, if you want to continue that.

Tags: Database

Similar Questions

  • COLLECTION ITERATOR PICKLER FETCH with XMLSEQUENCEFROMXMLTYPE

    Hi all

    We have the database Oracle 10.2.0.4 on solaris 10.

    I found a few xml queries that consume CPU and memory highly, here is the execution plan for one of this sql xml.
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    SQL_ID  gzsfqp1mkfk8t, child number 0
    -------------------------------------
    SELECT B.PACKET_ID FROM CM_PACKET_ALT_KEY B, CM_ALT_KEY_TYPE C, TABLE (XMLSEQUENCE (EXTRACT (:B1 ,
    '/AlternateKeys/AlternateKey'))) T WHERE B.ALT_KEY_TYPE_ID = C.ALT_KEY_TYPE_ID AND C.ALT_KEY_TYPE_NAME = EXTRACTVALUE
    (VALUE (T), '/AlternateKey/@keyType') AND B.ALT_KEY_VALUE = EXTRACTVALUE (VALUE (T), '/AlternateKey') AND NVL
    (B.CHILD_BROKER_CODE, '6209870F57C254D6E04400306E4A78B0') = NVL (EXTRACTVALUE (VALUE (T), '/AlternateKey/@broker'),
    '6209870F57C254D6E04400306E4A78B0')
    
    Plan hash value: 855909818
    
    ------------------------------------------------------------------------------------------------------------------------------
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    | Id  | Operation                           | Name                   | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
    ------------------------------------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT                    |                        |       |       | 16864 (100)|          |       |       |
    |*  1 |  HASH JOIN                          |                        |    45 |  3240 | 16864   (2)| 00:03:23 |       |       |
    |   2 |   TABLE ACCESS FULL                 | CM_ALT_KEY_TYPE        |     5 |   130 |     6   (0)| 00:00:01 |       |       |
    |*  3 |   HASH JOIN                         |                        |   227 | 10442 | 16858   (2)| 00:03:23 |       |       |
    |   4 |    COLLECTION ITERATOR PICKLER FETCH| XMLSEQUENCEFROMXMLTYPE |       |       |            |          |       |       |
    |   5 |    PARTITION HASH ALL               |                        |    10M|   447M| 16758   (2)| 00:03:22 |     1 |    16 |
    |   6 |     TABLE ACCESS FULL               | CM_PACKET_ALT_KEY      |    10M|   447M| 16758   (2)| 00:03:22 |     1 |    16 |
    ------------------------------------------------------------------------------------------------------------------------------
    
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - access("B"."ALT_KEY_TYPE_ID"="C"."ALT_KEY_TYPE_ID" AND
                  "C"."ALT_KEY_TYPE_NAME"=SYS_OP_C2C(EXTRACTVALUE(VALUE(KOKBF$),'/AlternateKey/@keyType')))
       3 - access("B"."ALT_KEY_VALUE"=EXTRACTVALUE(VALUE(KOKBF$),'/AlternateKey') AND
                  NVL("B"."CHILD_BROKER_CODE",'6209870F57C254D6E04400306E4A78B0')=NVL(EXTRACTVALUE(VALUE(KOKBF$),'/AlternateKey/@broker'
                  ),'6209870F57C254D6E04400306E4A78B0'))
    Seems due to
    1. COLLECTION ITERATOR PICKLER FETCH with XMLSEQUENCEFROMXMLTYPE I think it's because of the use of table (XMLSEQUENCE())
    2. conversion of place according to their SYS_OP_C2C function as shown in the predicate information.
    3.table does not use the xmltype data type to store the XML
    4 jokers have been used (/ AlternateKey/@keyType)

    Could someone please help me in setting this query I know very less about XML DB

    Including a sql more who use also consuming huge CPU and memory, these tables is also not hving no matter which column with the xmltype data type.
    SELECT /*+  INDEX(e) */ XMLAGG(XMLELEMENT ( "TaggingCategory", XMLATTRIBUTES (G.TAG_CATEGORY_CODE AS
    "categoryType"), XMLELEMENT ("TaggingValue", XMLATTRIBUTES (C.IS_PRIMARY AS "primary", H.ORIGIN_CODE AS
    "origin"), XMLAGG (XMLCONCAT (XMLELEMENT ("Value", XMLATTRIBUTES (F.TAG_LIST_CODE AS "listType"),
    E.TAG_VALUE), CASE WHEN LEVEL = 1 THEN :B4 ELSE NULL END))) )) FROM TABLE (CAST (:B1 AS
    T_TAG_MAP_HIERARCHY_TAB)) A, TABLE (CAST (:B2 AS T_ENUM_TAG_TAB)) C, REM_TAG_VALUE E, REM_TAG_LIST F,
    REM_TAG_CATEGORY G, CM_ORIGIN H WHERE E.TAG_VALUE_ID = C.TAG_VALUE_ID AND F.TAG_LIST_ID = E.TAG_LIST_ID
    AND G.TAGGING_CATEGORY_ID = F.TAGGING_CATEGORY_ID AND H.ORIGIN_ID = C.ORIGIN_ID AND C.ENUM_TAG_ID =
    A.MAPPED_ENUM_TAG_ID GROUP BY G.TAG_CATEGORY_CODE, C.IS_PRIMARY, H.ORIGIN_CODE START WITH
    A.MAPPED_ENUM_TAG_ID = HEXTORAW (:B3 ) CONNECT BY PRIOR A.MAPPED_ENUM_TAG_ID = A.ENUM_TAG_ID
    
    Plan hash value: 2393257319
    
    -----------------------------------------------------------------------------------------------------------------
    | Id  | Operation                                    | Name             | Rows  | Bytes | Cost (%CPU)| Time     |
    -----------------------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT                             |                  |       |       | 16455 (100)|          |
    |   1 |  SORT AGGREGATE                              |                  |     1 |   185 | 16455   (1)| 00:03:18 |
    |   2 |   SORT GROUP BY                              |                  |     1 |   185 | 16455   (1)| 00:03:18 |
    |*  3 |    CONNECT BY WITH FILTERING                 |                  |       |       |            |          |
    |*  4 |     FILTER                                   |                  |       |       |            |          |
    |   5 |      COUNT                                   |                  |       |       |            |          |
    |*  6 |       HASH JOIN                              |                  |   667K|   117M| 16413   (1)| 00:03:17 |
    |   7 |        COLLECTION ITERATOR PICKLER FETCH     |                  |       |       |            |          |
    |*  8 |        HASH JOIN                             |                  |  8168 |  1459K| 16384   (1)| 00:03:17 |
    |   9 |         TABLE ACCESS FULL                    | REM_TAG_CATEGORY |    25 |   950 |     5   (0)| 00:00:01 |
    |* 10 |         HASH JOIN                            |                  |  8168 |  1156K| 16378   (1)| 00:03:17 |
    |  11 |          TABLE ACCESS FULL                   | REM_TAG_LIST     |   117 |  7137 |     5   (0)| 00:00:01 |
    |  12 |          NESTED LOOPS                        |                  |  8168 |   670K| 16373   (1)| 00:03:17 |
    |  13 |           MERGE JOIN                         |                  |  8168 |   215K|    27   (4)| 00:00:01 |
    |  14 |            TABLE ACCESS BY INDEX ROWID       | CM_ORIGIN        |     2 |    50 |     2   (0)| 00:00:01 |
    |  15 |             INDEX FULL SCAN                  | PK_CM_ORIGIN     |     2 |       |     1   (0)| 00:00:01 |
    |* 16 |            SORT JOIN                         |                  |  8168 | 16336 |    25   (4)| 00:00:01 |
    |  17 |             COLLECTION ITERATOR PICKLER FETCH|                  |       |       |            |          |
    |  18 |           TABLE ACCESS BY INDEX ROWID        | REM_TAG_VALUE    |     1 |    57 |     2   (0)| 00:00:01 |
    |* 19 |            INDEX UNIQUE SCAN                 | PK_REM_TAG_VALUE |     1 |       |     1   (0)| 00:00:01 |
    |* 20 |     HASH JOIN                                |                  |       |       |            |          |
    |  21 |      CONNECT BY PUMP                         |                  |       |       |            |          |
    |  22 |      COUNT                                   |                  |       |       |            |          |
    |* 23 |       HASH JOIN                              |                  |   667K|   117M| 16413   (1)| 00:03:17 |
    |  24 |        COLLECTION ITERATOR PICKLER FETCH     |                  |       |       |            |          |
    |* 25 |        HASH JOIN                             |                  |  8168 |  1459K| 16384   (1)| 00:03:17 |
    |  26 |         TABLE ACCESS FULL                    | REM_TAG_CATEGORY |    25 |   950 |     5   (0)| 00:00:01 |
    |* 27 |         HASH JOIN                            |                  |  8168 |  1156K| 16378   (1)| 00:03:17 |
    |  28 |          TABLE ACCESS FULL                   | REM_TAG_LIST     |   117 |  7137 |     5   (0)| 00:00:01 |
    |  29 |          NESTED LOOPS                        |                  |  8168 |   670K| 16373   (1)| 00:03:17 |
    |  30 |           MERGE JOIN                         |                  |  8168 |   215K|    27   (4)| 00:00:01 |
    |  31 |            TABLE ACCESS BY INDEX ROWID       | CM_ORIGIN        |     2 |    50 |     2   (0)| 00:00:01 |
    |  32 |             INDEX FULL SCAN                  | PK_CM_ORIGIN     |     2 |       |     1   (0)| 00:00:01 |
    |* 33 |            SORT JOIN                         |                  |  8168 | 16336 |    25   (4)| 00:00:01 |
    |  34 |             COLLECTION ITERATOR PICKLER FETCH|                  |       |       |            |          |
    |  35 |           TABLE ACCESS BY INDEX ROWID        | REM_TAG_VALUE    |     1 |    57 |     2   (0)| 00:00:01 |
    |* 36 |            INDEX UNIQUE SCAN                 | PK_REM_TAG_VALUE |     1 |       |     1   (0)| 00:00:01 |
    -----------------------------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       3 - access(SYS_OP_ATG(VALUE(KOKBF$),1,2,2)=PRIOR NULL)
       4 - filter(SYS_OP_ATG(VALUE(KOKBF$),2,3,2)=HEXTORAW(:B3))
       6 - access(SYS_OP_ATG(VALUE(KOKBF$),1,2,2)=SYS_OP_ATG(VALUE(KOKBF$),2,3,2))
       8 - access("G"."TAGGING_CATEGORY_ID"="F"."TAGGING_CATEGORY_ID")
      10 - access("F"."TAG_LIST_ID"="E"."TAG_LIST_ID")
      16 - access("H"."ORIGIN_ID"=SYS_OP_ATG(VALUE(KOKBF$),3,4,2))
           filter("H"."ORIGIN_ID"=SYS_OP_ATG(VALUE(KOKBF$),3,4,2))
      19 - access("E"."TAG_VALUE_ID"=SYS_OP_ATG(VALUE(KOKBF$),7,8,2))
      20 - access(SYS_OP_ATG(VALUE(KOKBF$),1,2,2)=PRIOR NULL)
      23 - access(SYS_OP_ATG(VALUE(KOKBF$),1,2,2)=SYS_OP_ATG(VALUE(KOKBF$),2,3,2))
      25 - access("G"."TAGGING_CATEGORY_ID"="F"."TAGGING_CATEGORY_ID")
      27 - access("F"."TAG_LIST_ID"="E"."TAG_LIST_ID")
      33 - access("H"."ORIGIN_ID"=SYS_OP_ATG(VALUE(KOKBF$),3,4,2))
           filter("H"."ORIGIN_ID"=SYS_OP_ATG(VALUE(KOKBF$),3,4,2))
      36 - access("E"."TAG_VALUE_ID"=SYS_OP_ATG(VALUE(KOKBF$),7,8,2))
    -Yasser

    Published by: YasserRACDBA on February 24, 2010 20:30
    Added a sql more...

    Looking at the second query, there also many variable bind... You will find the types and values of each BINDING. Also, I'm suspcious about XMLCONCAT using... Can you discovered why he uses the developer...

    SELECT /*+  INDEX(e) */  XMLAGG
                             (
                                XMLELEMENT
                                (
                                   "TaggingCategory",
                                   XMLATTRIBUTES (G.TAG_CATEGORY_CODE AS "categoryType"),
                                   XMLELEMENT
                                   (
                                     "TaggingValue",
                                     XMLATTRIBUTES (C.IS_PRIMARY AS "primary", H.ORIGIN_CODE AS "origin"),
                                     XMLAGG
                                     (
                                        XMLCONCAT
                                        (
                                          XMLELEMENT
                                          (
                                            "Value",
                                            XMLATTRIBUTES (F.TAG_LIST_CODE AS "listType"),
                                            E.TAG_VALUE
                                          ),
                                          CASE WHEN LEVEL = 1
                                              THEN :B4
                                              ELSE NULL
                                          END
                                        )
                                     )
                                   )
                                 )
                               )
     FROM TABLE (CAST (:B1 AS T_TAG_MAP_HIERARCHY_TAB)) A,
          TABLE (CAST (:B2 AS T_ENUM_TAG_TAB)) C,
          REM_TAG_VALUE E,
          REM_TAG_LIST F,
          REM_TAG_CATEGORY G,
          CM_ORIGIN H
    WHERE E.TAG_VALUE_ID = C.TAG_VALUE_ID
      AND F.TAG_LIST_ID = E.TAG_LIST_ID
      AND G.TAGGING_CATEGORY_ID = F.TAGGING_CATEGORY_ID
      AND H.ORIGIN_ID = C.ORIGIN_ID
      AND C.ENUM_TAG_ID = A.MAPPED_ENUM_TAG_ID
    GROUP BY G.TAG_CATEGORY_CODE, C.IS_PRIMARY, H.ORIGIN_CODE
          START WITH A.MAPPED_ENUM_TAG_ID = HEXTORAW (:B3 )
          CONNECT BY PRIOR A.MAPPED_ENUM_TAG_ID = A.ENUM_TAG_ID
    

    Published by: mdrake on February 24, 2010 08:11

  • COLLECTION ITERATOR PICKLER FETCH

    Hi all

    I explained the variable query with bind plan and this is the plan:

    ---------------------------------------------------------------------------------------------
    | Id  | Operation                                                                           | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
    ---------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT                                                     |                   | 16360 | 32720 |    40   (3)| 00:00:01 |
    |   1 |  COLLECTION ITERATOR PICKLER FETCH             | DISPLAY | 16360 | 32720 |    40   (3)| 00:00:01 |
    ---------------------------------------------------------------------------------------------
    

    So I ran the query with dummy values instead of bind variable using autotrace:

    ----------------------------------------------------------------------------------------------------------------------
    | Id  | Operation                                                                      | Name                                                | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------------------------------   --------------------
    |   0 | SELECT STATEMENT                                                |                                                           |     1 |    81 |    88   (8)| 00:00:02 |
    |   1 |  SORT UNIQUE                                                           |                                                           |     1 |    81 |    87   (7)| 00:00:02 |
    |   2 |   MERGE JOIN CARTESIAN                                     |                                                            |     1 |    81 |    86   (6)| 00:00:02 |
    |   3 |    NESTED LOOPS                                                      |                                                            |     1 |    81 |    84   (6)| 00:00:02 |
    |   4 |     NESTED LOOPS OUTER                                     |                                                           |     1 |    76 |    84   (6)| 00:00:02 |
    |*  5 |      HASH JOIN                                                             |                                                           |     1 |    64 |    82   (7)| 00:00:02 |
    |   6 |       NESTED LOOPS                                                   |                                                          |       |       |            |          |
    |   7 |        NESTED LOOPS                                                  |                                                           |     2 |    50 |     5   (0)| 00:00:01 |
    |   8 |         NESTED LOOPS                                                 |                                                           |     1 |    15 |     3   (0)| 00:00:01 |
    |*  9 |          INDEX UNIQUE SCAN                                      | PK_M_O                  |     1 |     5 |     1   (0)| 00:00:01 |
    |  10 |          MAT_VIEW ACCESS BY INDEX ROWID     | M_O_ITEM                |     1 |    10 |     2   (0)| 00:00:01 |
    |* 11 |           INDEX RANGE SCAN                                     | I_M_O_ITEM_03      |     1 |       |     1   (0)| 00:00:01 |
    |* 12 |         INDEX RANGE SCAN                                        | I01_P_O_ITEM        |     3 |       |     1   (0)| 00:00:01 |
    |  13 |        MAT_VIEW ACCESS BY INDEX ROWID            | P_O_ITEM            |     3 |    30 |     2   (0)| 00:00:01 |
    |* 14 |       MAT_VIEW ACCESS FULL                                 | P_T                         |     9 |   351 |    77   (7)| 00:00:02 |
    |  15 |      MAT_VIEW ACCESS BY INDEX ROWID         | T_AND_C_TXT      |     2 |    24 |     2   (0)| 00:00:01 |
    |* 16 |       INDEX RANGE SCAN                                     |           I_T_AND_C_TXT_01 |     2 |       |     1   (0)| 00:00:01 |
    |* 17 |     INDEX UNIQUE SCAN                                      | PK_P                |     1 |     5 |     0   (0)| 00:00:01 |
    |  18 |    BUFFER SORT                                                      |                             |    10 |       |    87   (7)| 00:00:02 |
    |  19 |     INDEX FAST FULL SCAN                                   | PK_T_AND_C       |    10 |       |     2   (0)| 00:00:01 |
    ----------------------------------------------------------------------------------------------------------------------
    

    Why did I receive different plans, and more importantly, what is 'COLLECTION ITERATOR PICKLER FETCH?

    Check out this AskTom thread,

    Ask Tom & quot; COLLECTION ITERATOR PICKLER FETCH & quot;

    HTH

    Aman...

  • How to view the monthly/annual statistics in terms of time past/calories burned, broken down by each individual activity such as run elliptical/outside etc. Y at - it a third party application that can help me to collect and display these data?

    How to view the monthly/annual statistics in terms of time past/calories burned, broken down by each individual activity such as run elliptical/outside etc. Y at - it a third party application that can help me to collect and display these data?

    Hello

    It is not currently possible to review the data the application integrated in activity or training on this basis. If you want Apple to consider adding this feature, you can suggest here:

    https://www.Apple.com/feedback/watch.html

    However, health and fitness data from other sources, iPhone, and Apple Watch are registered and grouped within the health on iPhone app. These data can be exported, which you may find useful to track the cumulative progress and/or analyze your activity more in detail.

    IPhone app activity also has a button for sharing (top right of the screen) that allows to share data - including social media, Messages, Mail, Notes, and a printer.

    Include third-party applications that can be useful, for example:

    Access to QS

    -"Access your HealthKit data in a table so you can Explorer using numbers, Excel, R, or any other tool compatible CSV."

    - https://itunes.apple.com/gb/app/qs-access/id920297614?mt=8

    SpectaRun workouts

    -"View from the workouts of your Apple Watch on your iPhone and to export these workouts so you can download them to your favorite online running community."

    - https://itunes.apple.com/gb/app/spectarun-workouts/id991723862?mt=8

    Data can also be exported directly from the application of the health (Health Data > All - Share at the top button on the right).

    Check the descriptions and support resources for third party applications for supported details of import and data analysis features.

    More information:

    Use the activity on your Apple Watch - Apple Support

    Use of the workout on your Apple Watch - Apple Support

    http://www.Apple.com/watch/health-and-fitness/

  • How to implement a callback to the help function call library function node in LabView?

    I try to call a fuction from a SDK.dll library by using the node call library feature. The SDK has been provided to

    me and I don't have the source code, just the .dll and .h files.

    The SdkSetPropertyEventHandler function has a function of recall as one of its parameters. How to apply the

    callback using the NSI node? I'm a good programmer LabView but this is my first time using the library to call

    Function node. I read all the info I can find on the web site of NOR and the discussion Forum, but can not understand

    This one out. I'm using LabView 8.6.

    The deacribes SDK.h function as:

    Function: SdkSetPropertyEventHandler

    (SdkSetPropertyEventHandler) SdkError SDKAPI
    SdkCameraRef inCameraRef,
    SdkPropertyEvent inEvnet,
    SdkPropertyEventHandler inPropertyEventHandler,
    SdkVoid * context);

    //
    Description:
    Registers a callback function to receive the status
    change the notification events for the States of property on a camera.
    //
    Parameters:
    In: inCameraRef - designate the object camera.
    inEvent - designated one or all the events will be completed.
    inPropertyEventHandler - designate the pointer to the callback
    function to receive the camera property-related events.
    inContext - designated application information must be passed
    way to the callback function. All the data necessary to
    your application can be passed.
    Output: no
    //
    Returns: A sdk errors.
    -----------------------------------------------------------------------------*/

    A separate header called SDKTypes.h file contains the following data:

    typedef SdkUInt32 SdkPropertyEvent;
    typedef SdkUInt32 SdkPropertyID;
    typedef void SdkVoid;

    typedef struct __SdkObject * SdkBaseRef;
    typedef SdkBaseRef SdkCameraRef;

    /*-----------------------------------------------------------------------------
    SdkPropertyEventHandler
    -----------------------------------------------------------------------------*/
    typedef SdkError (SDKCALLBACK * SdkPropertyEventHandler))
    SdkPropertyEvent inEvent,
    SdkPropertyID inPropertyID,
    SdkUInt32 inParam,
    SdkVoid * context);

    Thanks for your help.
    Alejandro

    Andrew_E wrote:

    Hi Rolfk,

    You are absolutely right. This article describes what you were talking about? I'm just trying to get as much information as possible on this thread if the solution is easier to find for the future. Thank you.

    Yes, but I find the idea of using .net to call a LabVIEW VI as callback function C a bit as using a roll of Steam ironing your pants. Why do it? Well the steamroller has extra security guards that make it less likely that you'll break your pants in the process, but it's not elegant IMHO.

    Write a C DLL that translates between a C callback and a user event LabVIEW using the PostLVUserEvent() of the interface of the kernel to run LabVIEW function seems so eleganter for me. Yes, it's a bit of programming in C, but good!

    Rolf Kalbermatter

  • panels and multithreading - what features can I call from another thread.

    I am writing a program (Windows XP, LabWindows/CVI 2010) that has several threads. The main thread generates and manages most of the panels, but not all. Is there a list of what control panel functions are thread-safe and which are not? Reading the help file and the different positions, the functions of set value are safe; game-attribute functions are NOT. (I found that calling (SetPanelAttribute) with ATTR_TITLE will be locked permanently a program!). What about calliing a command callback function? (Via the CallCntrlCallback() function). It seems to work very well so far, but I can't find anything definitive.

    I do a lot of multi-thread applications, so I have a few ideas for you.  Unfortunately, I have not tried to do many of the changes of attributes specific threads lower panel.

    I'm very careful about how I handle the wire "solidity", dealing with the variables in an asynchronous way, as much as possible, to avoid the use of blocking and incorrect values of the variables.

    But there are certainly many things simply cannot make you the son of the daughter.  Things like question popups and launch other threads cannot be done simply.  As long as you understand that the best place to do something is in the main thread, and then a girl thread can use PostDeferredCall (...), do something in the main thread

    In the thread of your daughter, you can insert this call:

    PostDeferredCall (launchNewThread, 0);

    And then this call performs this function in the main thread:
    void CVICALLBACK launchNewThread(void *callbackData)

    {
    CmtScheduleThreadPoolFunction (threadPoolHandle, NewThread, NULL, NULL);
    }

    Or you can insert calls from parameter of the attribute panel inside the function above, I suppose, to safely run in the main thread.

    Hoe, that helps...

    -Gary

  • Help! Calls made on handset rerouting to Smartband speaker

    How can I stop outgoing calls that I do on my device, rerouting to the speaker of the conversation Smartband?

    I dial a contact on my M7 a HTC, and a list of options will appear for a fraction of a second, asking if I want to use the M7 or SWR30 to make the call. I choose the M7 option, but he always re - routes the call to the speaker of the Smartband.

    I don't remember when I started having this problem. I have text message or more to make calls, then perhaps it was always a problem - but I only noticed in the last few days.

    Help!

    I worked out my own fix for this, but it is flawed. I'm just detail, in the case of other people with the same problem end up here after googling a solution.

    I replaced the Dialer with a soft - Swipe Dialer.

    I then used the application AutomateIt to create two new rules. I created a rule to Turn off Bluetooth when the Swipe Dialer app is launched; I also created a rule to market Bluetooth implementation when a call ends.

    Of course, if I call a favorite for the maintenance of the Smartband, it will not launch the application, so will not Bluetooth Turn off. And if the Bluetooth is already activated when a call ends, triggering the Bluetooth on doesn't make any difference.

    Using the Bluetooth Auto Connect app running in the background, the Smartband almost immediately reconnects after a call from my device is completed.

    I guess you can create two rules in Tasker, rather than AutomateIt - but you get the general idea.

  • Best calls "Windows Help" Attorney call me to say I have a security problem on my PC and wants that I let him remote connect to solve this problem, it is legitimate?

    The first few times we call I refused to listen to because it sounded wrong, but this time I heard him out and that's what they said. First, he was of the India, I think his accent and he said he was calling to inform me about a security problem with my PC, it is said to "Best Windows Help" and that my network was showing at its end with a red light indicating a problem. He had opened the Run command and type of command bar to display the observer of events and go to the newspapers of Win and click Applications, then he wanted me to scroll the Application events and see how many errors was there. Between 20 and 50 I said, he said oh yes you have a problem and that he could fix in a few minutes, then it puts me in a collaborator of his that says display the control bar run then type "Iexplore www.support.me" which led me to a "Logmein Rescue page to https://secure.logmeinrescue.com/Customer/Code.aspx. At this point, that he asked me to give him full access to my PC in which I said, "you're crazy, no way" and he said OK then your PC will freeze and crash and I said a few words very friendly back and hung up. They seem to call every month or two and it looks like the same guy. Is it a Con? Who is this company "best Windows Help and how are they finding me? They say the information they hold comes from Microsoft. My caller ID lists like V052409070106, phone # (202) 011 - 3341. What is everything. Also, my PC is not crash or freeze because I installed it 2 years ago. I am running Win 7 Pro with Microsoft Security Essentials and windows Firewall behind a Cisco router.

    Scam.  They said that my computer was downloading malicious code and therefore transmit signals the error on their server.

    They have a Web site, as afar as I can tell.  I asked the guy at the phone for his site.  He couldn't give me a Web site URL or couldn't pronounce correctly.  He was frustrated and hung up.  Scam.

  • HELP the call Video Editor - problem

    I followed all the formats here

    https://developer.BlackBerry.com/native/documentation/Cascades/device_platform/invocation/video_edit...

    When this function is executed, the screen fades a bit then goes back to a normal screen brightness. This means he tries actually calls it but does not seem to want to continue. This also happens in some applications such as Blaq, during the sharing of the image in the Application photos of Blaq sometimes this also happens. I also tried the code below to 10.1 and 10.2 Z10 devices and an Alpha of Dev C.

    This is a file that is spent and real and valid

    file:///accounts/1000/shared/camera/VID_00000001.mp4
    

    And that's my job

    void VideoEditor::invokeVideoEditor(QString filePath)
    {
        bb::system::InvokeRequest request;
        request.setTarget("sys.video_editor.card");
        request.setAction("bb.action.EDIT");
        request.setUri(filePath);        // also tried with this uncommented
        //request.setFileTransferMode(bb::system::FileTransferMode::CopyReadWrite);
        request.setMimeType("video/mp4");
        invokeManager->invoke(request);
    
        bool connected = connect(invokeManager, SIGNAL(childCardDone(const bb::system::CardDoneMessage&)),
        this, SLOT(onChildCardDone(const bb::system::CardDoneMessage&)));
    
        if(connected)
        {
            qDebug() << "CONNECTED: " + filePath;
        }
    }
    

    My Picture Editor feature works completely perfectly well:

    void PictureEditor::invokePictureEditor(QString filePath)
    {
        bb::system::InvokeRequest request;
        request.setTarget("sys.pictureeditor.cardeditor");
        request.setAction("bb.action.EDIT");
        request.setUri(filePath);
        request.setFileTransferMode(bb::system::FileTransferMode::CopyReadWrite);
        request.setMimeType("image/jpeg");
        invokeManager->invoke(request);
    
        bool connected = connect(invokeManager, SIGNAL(childCardDone(const bb::system::CardDoneMessage&)),
        this, SLOT(onChildCardDone(const bb::system::CardDoneMessage&)));
    
        if(connected)
        {
            qDebug() << "CONNECTED";
        }
    }
    

    Any suggestions please?

    This works, however the docs were missing from what you had to do here.  I'll get updated.  For now, here's a snippet of code that calls the video editor.

    bb::system::InvokeRequest request;
    QUrl invokeUri = QUrl::fromLocalFile("/accounts/1000/shared/camera/VID_20131224_132306.mp4");
    invokeUri.setScheme("videoeditor");
    invokeUri.setQueryDelimiters('=', ';');
    request.setTarget("sys.video_editor.card");
    request.setAction("bb.action.EDIT");
    request.setUri(invokeUri);
    request.setMimeType("video/mp4");
    InvokeManager manager;
    manager.invoke(request);
    
  • Performance limit collection

    Hello

    I just install my data collector, and it is detected automatically based on our Active Directory.

    I created a group of IP addresses, and I can see how to create my group-specific reports - but - I need to collect performance information on other beaches of IP addresses at all. These would involve traffic data collection on a wide AREA network that I'm not interested.

    How can I activate collection only for a Home Office?

    Hello

    If I understand your question corectly you have a few options-

    If you click on the: IPSubnet of remote desktop, you can "uncheck" the 'Active'. It will exclude the subnet of all reports.

    If you want systems in your report yet, but are unwilling to performance and/or ran inventory, you can go to the systems than IP address range, select all the objects, right-click, go to the 'Exclude' option and select the tasks that you want to exclude. See screenshot.

    I would like to know if that's what you're after

    Good luck

  • It help performance?

    Hi all

    11.2.0.1

    AIX 6.1 5L

    We have a large EMP table in the HR schema. This table is very busy that many programs or queries, select this option, inserts, update, deletion is made against it by many users.

    To relieve the stress on this table, I intend to create another table in the materialized view EMP_VW on the same schema. I just want to share the workload that all queries (select) be directed to the VIEW,

    and all LMD to the source table. Is this a good idea? This help spectacular performance?

    Thank you very much

    zxy

    It will not help.  And that may hurt.  What reason would you have to believe that this would be beneficial?

    You now have two copies of the data.  Then, you have two copies of the data in the buffer cache.  Assuming you don't have tons of memory lying around that nobody uses, it invariably means that you age on a ton of blocks useful to store multiple copies of the blocks for this table.

    You now have to keep a record of materialized on the base table view.  If you now need to do extra work every time a transaction touches the table.  And, assuming that you build a materialized view VALIDATION ON so that you don't have to deal with given mismatch, you will incur the cost of updating the materialized view when you commit your transaction.  You could reduce the impact by letting the materialized view to the table of basic trolling, but now you have questions where someone inserts a row in the base table, asks the materialized view, and doesn't immediately.

    In addition, you will then need to go to the effort to modify the code to split the workload and test of all these changes.  And, of course, the cost of a doubling of storage, maintaining two sets of index, etc.

    Justin

  • Start page URL is not displayed when context-sensitive help is called

    IM using RoboHelp 11 to generate contextual WebHelp files. In the build settings, I selected the output folder and start under the name index.htm page.

    I have successfully the files generated and given the SSL! folder for developers. They use the API of Robohelp.

    However when they call a page with a map id, page, but instead of the left-hand navigation pane displays the link is displayed. Pane appears by clicking on the navigation.

    On checking the URL, index.htm is not present in the file.

    I tried manually adding index.htm to all URLS listed in the whcshdata.js. but then the navigation pane is displayed twice. When updating, it is shown as expected.

    Help, please

    It's there, but it's a little hidden in the amount of information.

    You must specify a CSH window. HR, you create a window and set on 2 panels. In the CSH call, let developers specify the name of the window.

    Kind regards

    Willam

  • Need help by calling the stored procedure

    Hi Experts,

    I created under procedure, while calling me, it throws an error.
    CREATE OR REPLACE PROCEDURE spdemo (param1 OUT NUMBER)
     is
     BEGIN
     SELECT COUNT(*) INTO param1
     FROM TEST_DEMO;
     END;
    Can any1 help me get the result or to call this procedure?

    Thnx in advance...

    Published by: 977490 on January 18, 2013 02:25

    Hello

    977490 wrote:
    ... I created under procedure, while calling me, it throws an error.

    If the problem of the call, and then after the call.

    Here's a possible way to call spdemo and see the results:

    SET   SERVEROUTPUT   ON
    
    DECLARE
        test_demo_cnt  NUMBER;
    BEGIN
        spdemo (test_demo_cnt);
    
        dbms_output.put_line (test_demo_cnt || ' = value returned by spdemo');
    END;
    /
    
    CREATE OR REPLACE PROCEDURE spdemo (param1 OUT NUMBER)
    is
    BEGIN
    SELECT COUNT(*) INTO param1
    FROM TEST_DEMO;
    END;
    

    I'm tempted to make a function, not a procedure.

    CREATE OR REPLACE FUNCTION spdemo
    RETURN NUMBER
     IS
        cnt          NUMBER;
     BEGIN
         SELECT  COUNT (*)
         INTO    cnt
         FROM    test_demo;
    
         RETURN  cnt;
     END;
    /
    SHOW ERRORS
    

    Then you can call it in the SQL statements, as you call functions such as SYSDATE:

    SELECT     spdemo
    FROM     dual
    ;
    
  • Helps the ArrayCollection collection

    Hello

    I need help on the syntax of how to get and set the elements in a 2 dimensional ArrayCollection collection list.  For example if I have the following:

    public var vline:ArrayCollection = new ArrayCollection([)
    {time: 0, line: 10}

    {time: 1 line: 0},.
    {time: line 2: 0},.
    {time: line 3: 0},.

    ....

    How can I get

    online time = 1

    How to set

    line 10 in time = 2

    I hope you can help,

    You can also directly access:

    vLine [0] .line = 55;  sets the value at 55 instead of 10

    vline.getItemAt (0) .line = 65; sets the value to 65 instead of 10

    So, you can use the syntax of support [] or the getItemAt and directly access your .line and hung up "Properties".

  • Need help with debugging collection in bulk and loop forall

    Hi people,

    I was wondering if someone can look at my PL/SQL code and tell me where I'm wrong.

    Environment
    =========
    10g (Rel 2)

    Algorithm of
    =======

    A slider lets collect records
    The data block
    Bulk insert the data into a table

    Implementation
    ==========

    Set serveroutput on;

    declare

    cursor source_cur is
    Select * from
    from t1;

    -Define the variables and collection types to be used by the BULK COLLECT clause

    source_data_type type is the table of the source_cur % rowtype;

    source_data_table source_data_type;

    Start

    Open source_cur;
    loop
    extraction source_cur
    bulk collect into source_data_table;

    When the output source_data_table.count = 0;

    -Now, we print the data collected
    -for i in source_data_table.first... source_data_table. Last
    -loop
    -dbms_output.put_line (' company name: ' | source_data_table (i).) Company);
    -dbms_output.put_line ('Count: ' | source_data_table.) (COUNT);
    -end loop;
    end loop;
    close source_cur;


    Note: The statements above Print print the correct data and County

    -Now, bulk insert us the data into the target table

    dbms_output.put_line ('Count: ' | source_data_table.) (COUNT);

    Note: The print statement above indicates a number 0 =. Since there is no available record, FORALL loop below will not insert anything in the table

    ForAll idx in source_data_table. FIRST... source_data_table. LAST
    Insert into T2
    source_data_table (idx) values;
    end;
    /


    Thanks in advance

    rogers42

    You'll want to do something like this

    open source_cur;
    loop
    fetch source_cur
    bulk collect into source_data_table;
    
    exit when source_data_table.count = 0;
    
    forall idx in source_data_table.FIRST .. source_data_table.LAST
    insert into T2
    values source_data_table(idx);
    end loop;
    close source_cur;
    

    or even better:

    insert into target
    select col, col, col
      from source
    

    no need to COLLECT in BULK and FORALL
    ;)

Maybe you are looking for