10G Viewer / Desktop Best Practice

Hello,
I'd like to get some advices about choosing to use Viewer or Desktop.
The situation is that we have a huge database, with long queries to run, and about 1000 users.
I think that, by using Viewer, the server will be overloaded by the user sessions.
In the other side, if we use Desktop, the server send the data, and Disco Desktop is processing the data to produce the report.
Is that comment correct ?
Is there any particular server setup to make for supporting 1000 users ?
Thanks,
Olivier

Hi Olivier
Well cost is a factor. To license 1,000 Desktop users will cost you $1 million. Each Desktop license is $1,000 per named user. Business intelligence Application server is licesned at $20,000 per processor for the stand-alone 10.1.2 Discoverer or $30,000 per processor for the full enterprise edition.
For a 1,000 user system, you need to work out how many will be concurrent. Having worked in similarly sized organizations I would say that you are unlikely to have more than 200 concurrent users out of the 1,000 user base. My recommendation would be to go for a 4-processor server (estimate around $50,000 for a good one), and a 4-processor license, $80,000 if just Discoverer or $120,000 if you want the full thing with Portal.
The Application Server route is definitely cheaper as you can see and a powerful 4-processor box should easily be able to handle your suer base.
Hope this helps
Regards
Michael

Similar Messages

  • View/Controller best practices

    Hello,
    A coworker and I are in charge of creating the standards for Web Dynpro development at our company.  We've been able to agree on most topics, but we're stuck on one issue.  Should ALL logic be in the controller or is it ok to perform some logic in the views?
    My coworker makes some valid points - we work in a team environment and you can't have two people working on the controller at the same time, if all your logic is in there, it's practically impossible for a group of developers to work on the same application.  In addition, there's often logic that's only applicable to a certain view.  He doesn't like the idea of a controller cluttered with logic from all the views, and doesn't see why we need to add an extra layer to execute something.  For instance, of a model is needed only for one view (say, to look up fields for a dropdown that only exists on that view), why have yet another executeSomeRFC method in the controller when we can do it in the view?
    My opinion is that Web Dynpro follows the MVC paradigm, and therefore all logic should be in the controller.  While it's true that right now a certain model or a certain piece of logic might only be needed for the one view, you never know if it will be needed somewhere else later.  In addition, to make the statement that "logic that's only needed for one view can be done in that view" leaves it open for a lot of interpretation and I think developers can start sneaking more and more code into the view because they think it's easier, when that is not what the view was created for. The exceptions, for me is logic that specifically has to do with the UI - for instance, if you select this checkbox, it will make 4 fields on the table disabled and change the label text of another field.
    We both see the other person's point of view and we can't decide where to move from here.  We're open to the opinions of other Web Dynpro experts.  What do you guys think?
    Thanks,
    Jennifer

    We have had the same discussion at my Company and came to the following conclusion and coding standard. It is preferable to keep all backend model call logic in the Component Controller, for various reasons if you ever drop a view or goto using some other type of UI interface  e.g. PDAs, with the same controller you already have the functionality there in the controller coded and tested.
    What I have seen happen before we adapted this standard with consultants  or less experienced developerrs is that they tend to copy and paste the same functionality from view to new view creating a maintenance headache down the road, even duplicating the code as they can not find the functionality or are too lazy to look for it then try coding their own. It is for this reason our company adapted the best practice of creating all backend call logic even if it is only required by a single view Dynpro View, in the component controller and calling it from the view as <b> wdThis.wdGet.doXXXFunction();</b>
    Also this helps code maintainers and new team members as they know all backend call logic is in the controller. I believe you will also find this practice recommended in the SAP Press WebDynpro Java books.
    Alex

  • Oracle JDBC (10g) reading clobs -- best practices

    What is the better approach using oracle 10g to save clobs:
    #1) This:
    PreparedStatement pstmt = conn.prepareStatement
    //Create the clob for insert
    Clobs Clobs = new Clobs();
    CLOB TempClob = Clobs.CreateTemporaryCachedCLOB(conn);
    java.io.Writer writer = TempClob.getCharacterOutputStream();
    writer.write(Description);
    writer.flush();
    writer.close();
    #2) Or this:
    OraclePreparedStatement pstmt = (OraclePreparedStatement)conn.prepareStatement
    pstmt.setStringForClob()
    According to my notes, it is #2.
    What is the better approach to read clobs:
    #1) Stream the clob
    //Get character stream to retrieve clob data
    Reader instream = ClobIn.getCharacterStream();
    //Create temporary buffer for read
    char[] buffer = new char[10];
    //Length of characters read
    int length = 0;
    //Fetch data
    while ((length = instream.read(buffer)) != -1){
    for (int i=0; i<length; i++){
    Contents += buffer;
    //Close input stream
    instream.close();
    //Empty LOB
    ClobIn.empty_lob();
    #2) Or this:
    Simply use rs.getString() to get your clob contents. This will return the entire clob and will not truncate.
    Im just confused on the best practices for performance/memory allocation and I keep reading people saying different.
    Reposted in JDBC forum

    Check chapter 16 of "PL/SQL Programming", by Oracle Press, for a starter.
    Then have a look at this link - I found it helpful: http://www.oracle.com/technology/sample_code/tech/java/sqlj_jdbc/files/advanced/LOBSample/LOBSample.java.html

  • View State Best Practice for Hiding Components?

    When changing states and hiding components, what is the best practice?
    Set Height/Width=0?
    Set Visible/IncludeInLayout=False?
    Or is there a better way?

    Good point. That's what I thought but I'm working through 'Adobe Flex 3 Training from the Source' and they explicitly set width/height to 0 in the new state so I thought I was not doing it correctly.

  • Multiple view state best practice for IOS packaged app - Tabbed view or blank template?

    TabbedViewNavigatorApplication or plain Application?
    I have an iPad app that has a fairly complex main view.  Has lots of view state changes.  Before a user can get to that main view, however, they have to go through two other screens:
    1.  Authentication
    2.  Fill out and submit a small form (maybe 6 fields)
    If they do those two things right, they can move on to the main view.  If they don't, they can't move on and the main view shouldn't load.
    Don't want a tab bar showing in the main view.  Has to be full screen.
    My thoughts were:
    1.  Start with the tabbed view template because it's built for this.  Just figure out a way to hide bars top and bottom for main view.
    2.  Use a blank template and do everything with standarf Flex view states
    Not sure...

    Or you can go with door #3, a blank template with a ViewNavigator you use to push and pop your views from the Main.
    View states are heavy. Avoid them like the plague in mobile apps. They are ok for small things like buttons and such, but that's about it.

  • Materialized Views/Reporting Best Practice

    Hi,
    We have a number of complex materialized views (joining many tables) that are rebuilt every night by doing a full refresh (RERESH FORCE ON DEMAND). The views take a few hours to refresh and I have a concern that they will become slower over time as more data is added into the underlying tables.
    Does anyone have any advice on other ways to achieve the rebuilds other that doing a full refresh? I would ideally like to refresh on commit, but as they are complex it won't allow that.
    Regards
    Paul

    Have you tried "MATERIALIZED VIEW LOG"
    For more info you can refer..
    http://docs.oracle.com/cd/E11882_01/server.112/e25554/toc.htm

  • Best practice for component layout?

    Hi,can people tell me their views on best practice in this area, using JSF.
    Eg, say I want this:
        LabelSml    InputField
        LabelLarge  InputField... ie 2 labels, 2 fields, vertically alligned, and with some space between the label and the field.
    and this one:
        Field                             Field... ie 2 fields with a lot of space between them.
    Finally, are there any examples on the web of UIs with many discrete fields on them (as opposed to logon/helloWorld and matrix data control), where I can look at how the design has been done.
    Marc

    I don't know if our solution is a best practice. We are not using the label property of input components because the alignment does not satisfy then. Instead we are using a <h:panelGrid> and nest <ui:label> and <ui:textField> (Studio Creator components) components in it. Multiple components in one cell are surrounded with a nested layout or grid panel. The number of columns is set by the attribute "columns" and width is controlled by the attribute "columnClasses". Example
    <?xml version="1.0" encoding="UTF-8"?>
    <jsp:root version="1.2" xmlns:bp="http://java.sun.com/blueprints/ui/14" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"
        xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:ui="http://www.sun.com/web/ui">
        <jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"/>
        <f:view locale="#{SessionBean1.locale}">
            <f:loadBundle basename="com.asci.nef.resourcen.Aktionen" var="akt"/>
            <f:loadBundle basename="com.asci.nef.resourcen.Label" var="lab"/>
            <f:loadBundle basename="com.asci.nef.resourcen.Datenlisten" var="datenlisten"/>
            <f:loadBundle basename="com.asci.nef.resourcen.Meldungen" var="msg"/>
            <ui:page binding="#{personal$Mitarbeiterauswahl.page1}" id="page1">
                <ui:html binding="#{personal$Mitarbeiterauswahl.html1}" id="html1">
                    <ui:head binding="#{personal$Mitarbeiterauswahl.head1}" id="head1">
                        <ui:link binding="#{personal$Mitarbeiterauswahl.link1}" id="link1" url="/resources/stylesheet.css"/>
                        <ui:script binding="#{personal$Mitarbeiterauswahl.scriptFenster}" id="scriptFenster" url="/resources/fenster.js"/>
                    </ui:head>
                    <ui:body binding="#{personal$Mitarbeiterauswahl.body1}" id="body1" style=" -rave-layout: grid">
                        <jsp:directive.include file="../Menue.jspf"/>
                        <ui:form binding="#{personal$Mitarbeiterauswahl.form1}" id="form1">
                            <div>
                                <jsp:directive.include file="../Fensterkennung.jspf"/>
                            </div>
                            <ui:tabSet binding="#{personal$Mitarbeiterauswahl.tabSetPersonaldaten}" id="tabSetPersonaldaten" selected="tabSuchen" style="position: absolute; left: 0px; top: 36px; width: 100%;">
                                <ui:tab binding="#{personal$Mitarbeiterauswahl.tabSuchen}" id="tabSuchen" text="#{akt.funktion110}">
                                    <ui:panelLayout binding="#{personal$Mitarbeiterauswahl.layoutPanelSuchen}" id="layoutPanelSuchen">
                                        <h:panelGrid binding="#{personal$Mitarbeiterauswahl.gridPanelSuchen}" columnClasses="gridlabel, griddata" columns="2"
                                            id="gridPanelSuchen" style="position:absolute; left:100px; top:30px;">
                                            <ui:label binding="#{personal$Mitarbeiterauswahl.labelPersonalnummerSuchen}" id="labelPersonalnummerSuchen" text="#{lab.mitarbeiterauswahl_personalnummer}"/>
                                            <ui:textField binding="#{personal$Mitarbeiterauswahl.textFieldPersonalnummerSuchen}" converter="javax.faces.Long"
                                                id="textFieldPersonalnummerSuchen" maxLength="10" styleClass="eingabe1"/>
                                            <ui:label binding="#{personal$Mitarbeiterauswahl.labelNameSuchen}" for="textFieldNameSuchen" id="labelNameSuchen" text="#{lab.mitarbeiterauswahl_name}"/>
                                            <ui:textField binding="#{personal$Mitarbeiterauswahl.textFieldNameSuchen}" converter="TextTrim" id="textFieldNameSuchen"
                                                maxLength="30" styleClass="eingabe4"/>
                                            <ui:label binding="#{personal$Mitarbeiterauswahl.labelGeburtsdatumSuchen}" id="labelGeburtsdatumSuchen" text="#{lab.mitarbeiterauswahl_geburtsdatum}"/>
                                            <ui:textField binding="#{personal$Mitarbeiterauswahl.textFieldGeburtsdatumSuchen}"
                                                converter="#{SessionBean1.sqlDateConverter}" id="textFieldGeburtsdatumSuchen" maxLength="10" styleClass="eingabe1"/>
                                            <ui:label binding="#{personal$Mitarbeiterauswahl.labelTaetigkeitSuchen}" id="labelTaetigkeitSuchen" text="#{lab.mitarbeiterauswahl_taetigkeit}"/>
                                            <ui:dropDown binding="#{personal$Mitarbeiterauswahl.dropDownTaetigkeitSuchen}" id="dropDownTaetigkeitSuchen"
                                                items="#{personal$Mitarbeiterauswahl.listOptionsTaetigkeitSuchen}" styleClass="eingabe4"/>
                                            <ui:label binding="#{personal$Mitarbeiterauswahl.labelVereinbarungSuchen}" id="labelVereinbarungSuchen" text="#{lab.mitarbeiterauswahl_zusatzvereinbarung}"/>
                                            <ui:textField binding="#{personal$Mitarbeiterauswahl.textFieldVereinbarungSuchen}" id="textFieldVereinbarungSuchen" styleClass="eingabe4"/>
                                            <ui:label binding="#{personal$Mitarbeiterauswahl.labelSortieren}" id="labelSortieren" text="#{lab.mitarbeiterauswahl_sortieren}"/>
                                            <ui:radioButtonGroup binding="#{personal$Mitarbeiterauswahl.radioButtonGroupSortieren}" columns="4"
                                                id="radioButtonGroupSortieren"
                                                items="#{personal$Mitarbeiterauswahl.radioButtonGroupSortierenDefaultOptions.options}" required="true" selected="#{personal$Mitarbeiterauswahl.radioButtonGroupSortierenDefaultOptions.selectedValue}"/>
                                            <ui:label binding="#{personal$Mitarbeiterauswahl.labelDummy1}" id="labelDummy1"/>
                                            <ui:button action="#{personal$Mitarbeiterauswahl.buttonSuchen_action}"
                                                binding="#{personal$Mitarbeiterauswahl.buttonSuchen}" id="buttonSuchen" text="#{akt.button_suchen}"/>
                                            <ui:label binding="#{personal$Mitarbeiterauswahl.labelDummy2}" id="labelDummy2"/>
                                            <ui:listbox binding="#{personal$Mitarbeiterauswahl.listboxSuche}" id="listboxSuche" monospace="true"
                                                onDblClick="#{personal$Mitarbeiterauswahl.onDblClickAction}" rows="20" styleClass="eingabe7"/>
                                            <ui:label binding="#{personal$Mitarbeiterauswahl.labelDummy3}" id="labelDummy3"/>
                                            <ui:panelLayout binding="#{personal$Mitarbeiterauswahl.layoutPanelButtons2}" id="layoutPanelButtons2" panelLayout="flow">
                                                <ui:button action="#{personal$Mitarbeiterauswahl.buttonNeu_action}"
                                                    binding="#{personal$Mitarbeiterauswahl.buttonNeu}" id="buttonNeu" immediate="true" text="#{akt.button_neu}"/>
                                                <ui:button action="#{personal$Mitarbeiterauswahl.buttonBearbeiten_action}"
                                                    binding="#{personal$Mitarbeiterauswahl.buttonBearbeiten}" id="buttonBearbeiten" text="#{akt.button_bearbeiten}"/>
                                                <ui:button action="#{personal$Mitarbeiterauswahl.buttonLoeschen_action}"
                                                    binding="#{personal$Mitarbeiterauswahl.buttonLoeschen}" id="buttonLoeschen" text="#{akt.button_loeschen}"/>
                                            </ui:panelLayout>
                                        </h:panelGrid>
                                    </ui:panelLayout>
                                </ui:tab>
                            </ui:tabSet>
                            <h:panelGrid binding="#{personal$Mitarbeiterauswahl.gridPanelFehler}" id="gridPanelFehler" onclick="this.style.display = 'none';" style="position: absolute; right: 20px; bottom: 50px; width: 250px; height: 78px;"/>
                            <ui:panelLayout binding="#{personal$Mitarbeiterauswahl.layoutPanelConfirm}" id="layoutPanelConfirm" panelLayout="flow" style="position:absolute; top:36px; left:0px;width:100%; height:700px;">
                                <h:panelGrid binding="#{personal$Mitarbeiterauswahl.gridPanelConfirm}" columns="1" id="gridPanelConfirm" style="margin-left:auto; margin-right:auto; margin-top:300px; background-color:#FF3333;">
                                    <ui:staticText binding="#{personal$Mitarbeiterauswahl.staticTextConfirm}" id="staticTextConfirm" text="#{msg.global_loeschen}"/>
                                    <ui:panelLayout binding="#{personal$Mitarbeiterauswahl.layoutPanelConfirmButtons}" id="layoutPanelConfirmButtons" panelLayout="flow">
                                        <ui:button action="#{personal$Mitarbeiterauswahl.buttonConfirmYes_action}"
                                            binding="#{personal$Mitarbeiterauswahl.buttonConfirmYes}" id="buttonConfirmYes" text="#{akt.button_ja}"/>
                                        <ui:button action="#{personal$Mitarbeiterauswahl.buttonConfirmNo_action}"
                                            binding="#{personal$Mitarbeiterauswahl.buttonConfirmNo}" id="buttonConfirmNo" text="#{akt.button_nein}"/>
                                    </ui:panelLayout>
                                </h:panelGrid>
                            </ui:panelLayout>
                        </ui:form>
                    </ui:body>
                </ui:html>
            </ui:page>
        </f:view>
    </jsp:root>

  • Pool : best practice ODI : PLSQL or Interface object ?

    Hello,
    My ODI consultant has developped an interface to load a flat file into Hyperion Planning :
    * first step : load flat file into staging : done with "Interface" object
    * second step : transform staging table (1,2,3 ==> JAN, FEB, MAR // transform "-" into ND_Customer ... very easy transformation !) : done trough a PLSQL Procedure. Result is load into FACT_TABLE
    * third step : load FACT_TABLE into ESSBASE : done with "interface" object
    During design, we didn't discuss the technology, but after the build, I'm very suprised by the second step. There is no justification to do it with PLSQL. My consultant explains me : "I'd rather to use PLSQL". But from my point of view, ODI best practice is to use "Interface" (more flexible, you can change the topology without impact in interface etc ...)
    What is your point of view? Should I raise an issue and expect from my consultant a rewriting with "interface" object?
    Rgds

    Thx SH, the complexity (use of two intermediate tables : STAGING and FACT) is due to our requirment to archive the original data during one year (in STAGING) and to give an audit trail from Essbase to original data (before transformation). From Essbase we could go back to FACT Table (same member name) then goes back to STAGING by using and unique ID that produces a link between tables.
    From my point of view ODI Interface is the simplier way to maintain the "mapping", instead of PLSQL, but I would have more feedbacks from other developper to be sure of my feeling (I've done only 2 Hyperion Planning + ODI Project before the current one).
    The complexity of interface are low or medium : simple filter on one or two dimensions / DECODE mapping on Month / group by on similar records / for few interfaces, more complexe rules with IF statement.
    Thx in adavance

  • Operating system image build and management best practices?

    how do we create gold images for servers/desktops,
    Best practices image management,
    How do we control changes?
    How do we prevent unauthorized changes (installation of software)?
    What tools we can use for above.

    I use MDT 2013 Lite Touch to create my images
    http://www.gerryhampsoncm.blogspot.ie/2014/03/create-customised-reference-image-with.html
    You should use in-built ConfigMgr Role Based Access Control to manage images afterwards (look at the Operating System Deployment Manager role).
    Gerry Hampson | Blog:
    www.gerryhampsoncm.blogspot.ie | LinkedIn:
    Gerry Hampson | Twitter:
    @gerryhampson

  • Best-practice for Catalog Views ? :|

    Hello community,
    A best practice question:
    The situtation: I have several product categories (110), several items in those categories (4000) and 300 end-users.    I would like to know which is the best practice for segment the catalog.   I mean, some users should only see categories 10,20 & 30.  Other users only category 80, etc.    The problem is how can I implement this ?
    My first idea is:
    1. Create 110 Procurement Catalogs (1 for every prod.category).   Each catalog should contain only its product category.
    2. Assign in my Org Model, in a user-level all the "catalogs" that the user should access.
    Do you have any idea in order to improve this ?
    Saludos desde Mexico,
    Diego

    Hi,
    Your way of doing will work, but you'll get maintenance issues (to many catalogs, and catalog link to maintain for each user).
    The other way is to built your views in CCM, and assign these views to the users, either on the roles (PFCG) or on the user (SU01). The problem is that with CCM 1.0 this is limitated, cause you'll have to assign one by one the items to each view (no dynamic or mass processes), it has been enhanced in CCM 2.0.
    My advice:
    -Challenge your customer about views, and try to limit the number of views, with for example strategic and non strategic
    -With CCM 1.0 stick to the procurement catalogs, or implement BADIs to assign items to the views (I experienced it, it works, but is quite difficult), but with a limitated number of views
    Good luck.
    Vadim

  • Best Practice : how 2 fetch tables, views, ... names and schema

    hi,
    I am looking for the best practice about getting the catalog of a database.
    I have seen that I can make some select in system-tables(or views) such as DBA_TABLES and DBA_VIEWS, or DBA_CATALOG, but is that the best way to grab thses informations ?
    (I ask this question because It seems a strange way to me to get the table names using a simple select, but getting column info using a specialized function, OCIDescribeAny(). this does not look like a coherent API...)
    thanks for your advice
    cd

    in the same idea, why use OCIDescribeAny instead of doing an appropriate select in DBA_TAB_COLUMNS ?
    cd

  • What is the best practice for changing view states?

    I have a component with two Pie Charts that display
    percentages at two specific dates (think start and end values).
    But, I have three views: Start Value only, End Value only, or show
    Both. I am using a ToggleButtonBar to control the display. What is
    the best practice for changing this kind of view state? Right now
    (since this code was inherited), the view states are changed in an
    ActionScript function which sets the visible and includeInLayout
    properties on each Pie Chart based on the selectedIndex of the
    ToggleButtonBar, but, this just doesn't seem like the best way to
    do this - not very dynamic. I'd like to be able to change the state
    based on the name of the selectedItem, in case the order of the
    ToggleButtons changes, and since I am storing the name of the
    selectedItem for future reference.
    Would using States be better? If so, what would be the best
    way to implement this?
    Thanks.

    I would stick with non-states, as I have always heard that
    states are more for smaller components that need to change under
    certain conditions, like a login screen that changes if the user
    needs to register.
    That said, if the UI of what you are dealing with is not
    overly complex, and if it will not become overly complex, maybe
    states is the way to go.
    Looking at your code, I don't think you'll save much in terms
    of lines of code.

  • Best Practice Regarding Maintaining Business Views/List of Values

    Hello all,
    I'm still in the learning process of using BOXI to run our Crystal Reports.  I was never familiar with the BO environment before but I have recently learned that every dynamic parameter we create for a report, the Business View/Data Connectors/LOV are created on the Enterprise Repository the moment the Crystal Report is uploaded.
    All of our reports are authored from a SQL Command statement and often times, various reports will use the same field name from the database for different reports.  For example, we have several reports that use the field name "LOCATION" that exists on a good number of tables on the database.
    When looking at the Repository, I've noticed there are several variations of LOCATION, all which I'm assuming belongs to one specific report.  Having said that, I see that it can start to become a nightmare in trying to figure out which variation of LOCATION belongs to what report.  Sooner or later, the Repository will need to be maintained a bit cleaner, and with the rate we author reports, I forsee a huge amount of headache down the road.
    With that being said, what's the best practice in a nutshell when trying to maintain these repository items?  Is it done indirectly on the Crystal Report authoring side where you name your parameter field identifiable to a specific report?  Or is it done directly on the Repository side?
    Thank you.

    Eric, you'll get a faster qualified response if you post to the  Business Objects Enterprise Administration forum as that forum is monitored by qualified support for BOE

  • Best practice for making changes to Oracle apps business views and BAs/fold

    HI
    The oracle BI solution comes with pre-defined Business Views- database views and Business Areas and folders. If we want to customize those database views or BAs and folders what will be the best practice in order to avoid losing it during any upgrades.
    For ex Oracle out-of box Order Management BA that we are using heavily needs some additional fields to be added to Order Header and Order Lines folders and we also want to add some custom folders to this BA.
    If we do the changes to the database views behind this BA would they be lost during the upgrade or do we have to copy(duplicate) those views, updated them and create a custom BA and folders against those views.
    Thanks

    Hi,
    If you are adding new folders then just add them to the Oracle Business Area. The business area is just a collection of folders. If the business area was changed in an upgrade the new folder would not be deleted.
    If you want to add fields to the existing folders/views then you have 2 options. Add the field to the defining base view (these are the views beginning OEBV and OEFV) and then regenerate the business views. This may be overwritten if the view is upgrade but this is unlikely.
    Alternatively, copy the view to create a new version and then map the old folder to the new view and refresh. You may need to re-map the folder if the folder is upgraded, but at least you have a single folder used by both Oracle and custom reports.
    Rod West

  • Best practices for gathering statistics in 10g

    I would like to get some opinions on what is considered best practice for gathering statistics in 10g. I know that 10g has auto statistics gathering, but that doesn't seem to be very effective as I see some table stats are way out of date.
    I have recommended that we have at least a weekly job that generates stats for our schema using DBMS_STATS (DBMS_STATS.gather_schema_stats). Is this the right approach to generate object stats for a schema and keep it up to date? Are index stats included in that using CASCADE?
    Is it also necessary to gather system stats? I welcome any thoughts anyone might have. Thanks.

    Hi,
    Is this the right approach to generate object stats for a schema and keep it up to date? The choices of executions plans made by the CBO are only as good as the statistics available to it. The old-fashioned analyze table and dbms_utility methods for generating CBO statistics are obsolete and somewhat dangerous to SQL performance. As we may know, the CBO uses object statistics to choose the best execution plan for all SQL statements.
    I spoke with Andrew Holsworth of Oracle Corp SQL Tuning group, and he says that Oracle recommends taking a single, deep sample and keep it, only re-analyzing when there is a chance that would make a difference in execution plans (not the default 20% re-analyze threshold).
    I have my detailed notes here:
    http://www.dba-oracle.com/art_otn_cbo.htm
    As to system stats, oh yes!
    By measuring the relative costs of sequential vs. scattered I/O, the CBO can make better decisons. Here are the data items collected by dbms_stats.gather_system_stats:
    No Workload (NW) stats:
    CPUSPEEDNW - CPU speed
    IOSEEKTIM - The I/O seek time in milliseconds
    IOTFRSPEED - I/O transfer speed in milliseconds
    I have my notes here:
    http://www.dba-oracle.com/t_dbms_stats_gather_system_stats.htm
    Hope this helps. . . .
    Don Burleson
    Oracle Press author
    Author of “Oracle Tuning: The Definitive Reference”
    http://www.dba-oracle.com/bp/s_oracle_tuning_book.htm

Maybe you are looking for

  • Do until statement not working as intended

    I have the following code: $vms = get-vm foreach ($vm in $vms){ $vm.state;$vm.name;Stop-VM -VM $vm -force | out-null }     do         start-sleep -seconds 3         Write-Host $vm.name " is shutting down" -foregroundcolor cyan     until($VM.state -eq

  • ZEN V+ Not Recognized (Now after ripping err

    OK, I see that I am not the only one with this problem. My daughters ZEN V+ was working fine this morning, she ripped and loaded 5-20 songs when it gave her an error. Since that time the Media Explorer will not see that the player is attached. I have

  • Inbound RFC Adapter

    Hello,     When we are making a "call function Zfunction destination dest" for R3 --> XI --> ..., what/where exactly this Zfunction is? My understanding is that it is the Inbound interface name defined in XI. i.e. the Sender system interface is Zfunc

  • Mrp related problem

    Dear Gurus I am running mrp in md01 for consumption based planning.I have kept vb in mrp type hb in lot size and given the maximum stock limit  as well as reorder point.As I am running the mrp in md01 suppose a purchase requisition came for 100 for a

  • My iphone turned off yesteday by itself  and it wont turn back on today. can anyone help me on this problem?

    my iphonee turned of yesterday and it wont turn back on and it was fully charged too