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 aVARCHAR2
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.
Seems due toPLAN_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'))
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.
-YasserSELECT /*+ 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))
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?
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
-
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.
AlejandroAndrew_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.
-
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
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);
-
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
-
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.
Can any1 help me get the result or to call this procedure?CREATE OR REPLACE PROCEDURE spdemo (param1 OUT NUMBER) is BEGIN SELECT COUNT(*) INTO param1 FROM TEST_DEMO; END;
Thnx in advance...
Published by: 977490 on January 18, 2013 02:25Hello
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
rogers42You'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
-
connect to download the update
We were invited several times to update our software Firefox (19.02). When you click Update, a screen informs you that the download is in progress, but other than rotating striped blue and white, nothing happens. It can run for several minutes, and n
-
Firefox takes over all CPUS and download like crazy.
Firefox is take a lot of CPU and apparently download something like crazy. I kill the process, restart and it happens again. I blame my ISP initially, but when I switched to Chrome problems have completely disappeared.
-
I installed El Capitan. Now the e-mail program crashes. Suggestions?
I installed El Capitan. Now the e-mail program crashes. Suggestions?
-
Cannot access a site that is not down
Bad, I need to access http://pastebin.com/paste_finder.php or http://pastebin.com/ with my laptop Vista 64-bit using Chrome, Firefox or IE8. The site is not down, because it is accessible with my 7 64-bit office. What should I try? Add pastebin.com
-
If someone could answer me in french, it will be better